EDAC: fix memleak in module init error path
Subsystems (3)
PATCH 1/2 EDAC: fix memleak in module init error path
Make sure to use put_device() to free the initialised struct device so that resources managed by driver core also gets released in the event of a registration failure.
--- drivers/edac/edac_mc_sysfs.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/edac/edac_mc_sysfs.c +3 -3
@@ -1075,14 +1075,14 @@ int __init edac_mc_sysfs_init(void) err =device_add (mci_pdev);if (err <0 ) - goto out_dev_free; + goto out_put_device;edac_dbg (0 ,"device %s created\n" ,dev_name (mci_pdev));return 0 ; - out_dev_free: -kfree (mci_pdev); + out_put_device: +put_device (mci_pdev); out:return err; }
PATCH 2/2 EDAC: i7core: fix memleaks and use-after-free on probe and remove
Make sure to free and deregister the addrmatch and chancounts devices allocated during probe in all error paths. Also fix use-after-free in a probe error path and in the remove success path where the devices were being put before before deregistration.
--- drivers/edac/i7core_edac.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-)
drivers/edac/i7core_edac.c +15 -7
@@ -1177,15 +1177,14 @@ static int i7core_create_sysfs_devices(struct mem_ctl_info *mci) rc =device_add (pvt->addrmatch_dev);if (rc <0 ) -return rc; + goto err_put_addrmatch;if (!pvt->is_registered) { pvt->chancounts_dev =kzalloc (sizeof (*pvt->chancounts_dev),GFP_KERNEL );if (!pvt->chancounts_dev) { -put_device (pvt->addrmatch_dev); -device_del (pvt->addrmatch_dev); -return -ENOMEM ; + rc = -ENOMEM ; + goto err_del_addrmatch; } pvt->chancounts_dev->type = &all_channel_counts_type;
@@ -1199,9 +1198,18 @@ static int i7core_create_sysfs_devices(struct mem_ctl_info *mci) rc =device_add (pvt->chancounts_dev);if (rc <0 ) -return rc; + goto err_put_chancounts; }return 0 ; + +err_put_chancounts: +put_device (pvt->chancounts_dev); +err_del_addrmatch: +device_del (pvt->addrmatch_dev); +err_put_addrmatch: +put_device (pvt->addrmatch_dev); + +return rc; }static void i7core_delete_sysfs_devices (struct mem_ctl_info *mci)
@@ -1211,11 +1219,11 @@ static void i7core_delete_sysfs_devices(struct mem_ctl_info *mci)edac_dbg (1 ,"\n" );if (!pvt->is_registered) { -put_device (pvt->chancounts_dev);device_del (pvt->chancounts_dev); +put_device (pvt->chancounts_dev); } -put_device (pvt->addrmatch_dev);device_del (pvt->addrmatch_dev); +put_device (pvt->addrmatch_dev); }/****************************************************************************
Borislav Petkov
maintainerRe: [PATCH 2/2] EDAC: i7core: fix memleaks and use-after-free on probe and remove
Quoted 5 lines · Johan Hovold
Make sure to free and deregister the addrmatch and chancounts devices allocated during probe in all error paths. Also fix use-after-free in a probe error path and in the remove success path where the devices were being put before before deregistration.
Quoted 7 lines
Fixes 356f0a30860d ("i7core_edac: change the mem allocation scheme to make Documentation/kobject.txt happy")Cc stable <[email protected]> # 3.6Cc Mauro Carvalho Chehab <[email protected]>Signed-off-by Johan Hovold <[email protected]>--- drivers/edac/i7core_edac.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-)
Both applied, thanks.