Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2d56b109 authored by Denis Kirjanov's avatar Denis Kirjanov Committed by Borislav Petkov
Browse files

EDAC: Handle error path in edac_mc_sysfs_init() properly



Make sure proper deregistration happens on all error paths in
edac_mc_sysfs_init.

Signed-off-by: default avatarDenis Kirjanov <kirjanov@gmail.com>
[ Boris: cleanup and concretize commit message ]
Signed-off-by: default avatarBorislav Petkov <bp@alien8.de>
parent d5c6770d
Loading
Loading
Loading
Loading
+15 −2
Original line number Diff line number Diff line
@@ -1126,10 +1126,15 @@ int __init edac_mc_sysfs_init(void)
	edac_subsys = edac_get_sysfs_subsys();
	if (edac_subsys == NULL) {
		edac_dbg(1, "no edac_subsys\n");
		return -EINVAL;
		err = -EINVAL;
		goto out;
	}

	mci_pdev = kzalloc(sizeof(*mci_pdev), GFP_KERNEL);
	if (!mci_pdev) {
		err = -ENOMEM;
		goto out_put_sysfs;
	}

	mci_pdev->bus = edac_subsys;
	mci_pdev->type = &mc_attr_type;
@@ -1138,11 +1143,18 @@ int __init edac_mc_sysfs_init(void)

	err = device_add(mci_pdev);
	if (err < 0)
		return err;
		goto out_dev_free;

	edac_dbg(0, "device %s created\n", dev_name(mci_pdev));

	return 0;

 out_dev_free:
	kfree(mci_pdev);
 out_put_sysfs:
	edac_put_sysfs_subsys();
 out:
	return err;
}

void __exit edac_mc_sysfs_exit(void)
@@ -1150,4 +1162,5 @@ void __exit edac_mc_sysfs_exit(void)
	put_device(mci_pdev);
	device_del(mci_pdev);
	edac_put_sysfs_subsys();
	kfree(mci_pdev);
}