All of lore.kernel.org
 help / color / mirror / Atom feed
* [KJ] patch to fix initialization code of edd.c
@ 2006-07-30  1:31 Om.
  2006-07-30  1:56 ` Neil Horman
                   ` (7 more replies)
  0 siblings, 8 replies; 9+ messages in thread
From: Om. @ 2006-07-30  1:31 UTC (permalink / raw)
  To: kernel-janitors

Hi,
BIOS Enhanced Disk Drive Services (EDD) driver's failed return from
the init function causes memory leaks in src/drivers/firmware/edd.c
This is my first patch submission. It is generated against 2.6.18-rc2.

Review comments welcome.
Regards,
Om.

Signed-off-by: Om Nara<xhandle@gmail.com>

 drivers/firmware/edd.c |   27 +++++++++++++++++++--------
 1 files changed, 19 insertions(+), 8 deletions(-)

diff --git a/drivers/firmware/edd.c b/drivers/firmware/edd.c
index b4502ed..036dfc6 100644
--- a/drivers/firmware/edd.c
+++ b/drivers/firmware/edd.c
@@ -739,6 +739,7 @@ static int __init
 edd_init(void)
 {
 	unsigned int i;
+	unsigned int failno;
 	int rc=0;
 	struct edd_device *edev;

@@ -754,21 +755,31 @@ edd_init(void)
 	if (rc)
 		return rc;

-	for (i = 0; i < edd_num_devices() && !rc; i++) {
+	for (i = 0, failno = 0; i < edd_num_devices(); i++) {
 		edev = kzalloc(sizeof (*edev), GFP_KERNEL);
-		if (!edev)
-			return -ENOMEM;
-
+		if (!edev) {
+			failno = i;
+			rc = -ENOMEM;
+			goto alloc_fail;
+		}
 		rc = edd_device_register(edev, i);
 		if (rc) {
-			kfree(edev);
-			break;
+			failno = i;
+			goto devreg_fail;
 		}
 		edd_devices[i] = edev;
 	}
+	return rc;

-	if (rc)
-		firmware_unregister(&edd_subsys);
+devreg_fail:
+	kfree (edev);
+
+alloc_fail:
+	for (i = 0; i < failno; i++) {
+		edd_device_unregister (edd_devices[i]);
+		kfree (edd_devices[i]);
+	}
+	firmware_unregister(&edd_subsys);
 	return rc;
 }
_______________________________________________
Kernel-janitors mailing list
Kernel-janitors@lists.osdl.org
https://lists.osdl.org/mailman/listinfo/kernel-janitors

^ permalink raw reply related	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2006-07-30 22:39 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-07-30  1:31 [KJ] patch to fix initialization code of edd.c Om.
2006-07-30  1:56 ` Neil Horman
2006-07-30  5:26 ` Jesper Juhl
2006-07-30  5:52 ` Om.
2006-07-30  6:13 ` [KJ] patch to fix initialization code of edd.c [2nd try] Om.
2006-07-30  6:36 ` [KJ] patch to fix initialization code of edd.c Jaco Kroon
2006-07-30  8:09 ` [KJ] patch to fix initialization code of edd.c [3rd try] Om.
2006-07-30 21:34 ` [KJ] patch to fix initialization code of edd.c Neil Horman
2006-07-30 22:39 ` Om.

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.