Skip to content

Commit

Permalink
EDAC: Properly unwind on failure path in edac_init()
Browse files Browse the repository at this point in the history
edac_init() does not deallocate already allocated resources on failure
path.

Found by Linux Driver Verification project (linuxtesting.org).

 [ Boris: The unwind path functions have __exit annotation but are being
   used in an __init function, leading to section mismatches. Drop the
   section annotation and make them normal functions. ]

Signed-off-by: Alexey Khoroshilov <khoroshilov@ispras.ru>
Link: http://lkml.kernel.org/r/1423203162-26368-1-git-send-email-khoroshilov@ispras.ru
Signed-off-by: Borislav Petkov <bp@suse.de>
  • Loading branch information
khoroshilov authored and Borislav Petkov committed Feb 23, 2015
1 parent fc7cc6b commit c6b97bc
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 7 deletions.
4 changes: 2 additions & 2 deletions drivers/edac/edac_mc_sysfs.c
Expand Up @@ -914,7 +914,7 @@ int __init edac_debugfs_init(void)
return 0;
}

void __exit edac_debugfs_exit(void)
void edac_debugfs_exit(void)
{
debugfs_remove(edac_debugfs);
}
Expand Down Expand Up @@ -1155,7 +1155,7 @@ int __init edac_mc_sysfs_init(void)
return err;
}

void __exit edac_mc_sysfs_exit(void)
void edac_mc_sysfs_exit(void)
{
device_unregister(mci_pdev);
edac_put_sysfs_subsys();
Expand Down
13 changes: 8 additions & 5 deletions drivers/edac/edac_module.c
Expand Up @@ -112,20 +112,23 @@ static int __init edac_init(void)

err = edac_mc_sysfs_init();
if (err)
goto error;
goto err_sysfs;

edac_debugfs_init();

/* Setup/Initialize the workq for this core */
err = edac_workqueue_setup();
if (err) {
edac_printk(KERN_ERR, EDAC_MC, "init WorkQueue failure\n");
goto error;
edac_printk(KERN_ERR, EDAC_MC, "Failure initializing workqueue\n");
goto err_wq;
}

return 0;

error:
err_wq:
edac_debugfs_exit();
edac_mc_sysfs_exit();

err_sysfs:
return err;
}

Expand Down

0 comments on commit c6b97bc

Please sign in to comment.