Commit 1986aaf8 authored by Axel Lin's avatar Axel Lin Committed by Linus Torvalds

edd: fix possible memory leak in edd_init() error path

The error may happen at any iteration of the for loop, this patch properly
unregisters already registed edd_devices in error path.

[akpm@linux-foundation.org: remove unneeded NULL test]
Signed-off-by: default avatarAxel Lin <axel.lin@gmail.com>
Cc: Stephen Hemminger <shemminger@vyatta.com>
Cc: Jens Axboe <jens.axboe@oracle.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent ea98eed9
......@@ -744,7 +744,7 @@ static inline int edd_num_devices(void)
static int __init
edd_init(void)
{
unsigned int i;
int i;
int rc=0;
struct edd_device *edev;
......@@ -760,21 +760,27 @@ edd_init(void)
if (!edd_kset)
return -ENOMEM;
for (i = 0; i < edd_num_devices() && !rc; i++) {
for (i = 0; i < edd_num_devices(); i++) {
edev = kzalloc(sizeof (*edev), GFP_KERNEL);
if (!edev)
return -ENOMEM;
if (!edev) {
rc = -ENOMEM;
goto out;
}
rc = edd_device_register(edev, i);
if (rc) {
kfree(edev);
break;
goto out;
}
edd_devices[i] = edev;
}
if (rc)
kset_unregister(edd_kset);
return 0;
out:
while (--i >= 0)
edd_device_unregister(edd_devices[i]);
kset_unregister(edd_kset);
return rc;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment