edd: fix possible memory leak in edd_init() error path
PATCH v3 1/1 edd: fix possible memory leak in edd_init() error path
This version simply fix the coding style in v2. ( warnning by checkpatch.pl )
Quoted 1 line
From
7400dff50f7a6036839009d6990fd5c11f0654dbMon Sep 17 00:00:00 2001
From: Axel Lin <[email protected]>
Date: Tue, 13 Jul 2010 12:56:19 +0800
Subject: [PATCH v3] 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.
Signed-off-by Axel Lin <[email protected]>
--- drivers/firmware/edd.c | 20 +++++++++++++------- 1 files changed, 13 insertions(+), 7 deletions(-)
drivers/firmware/edd.c +13 -7
@@ -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; }
Signature · 1 line
1.5.4.3