Skip to content

Commit

Permalink
EDAC: Handle error path in edac_mc_sysfs_init() properly
Browse files Browse the repository at this point in the history
Make sure proper deregistration happens on all error paths in
edac_mc_sysfs_init.

Signed-off-by: Denis Kirjanov <kirjanov@gmail.com>
[ Boris: cleanup and concretize commit message ]
Signed-off-by: Borislav Petkov <bp@alien8.de>
  • Loading branch information
Denis Kirjanov authored and Borislav Petkov committed Nov 28, 2012
1 parent d5c6770 commit 2d56b10
Showing 1 changed file with 15 additions and 2 deletions.
17 changes: 15 additions & 2 deletions drivers/edac/edac_mc_sysfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -1138,16 +1143,24 @@ 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)
{
put_device(mci_pdev);
device_del(mci_pdev);
edac_put_sysfs_subsys();
kfree(mci_pdev);
}

0 comments on commit 2d56b10

Please sign in to comment.