Re: [CHECKER] 32 Memory Leaks on Error Paths

From: Chris Wright
Date: Mon Sep 22 2003 - 17:58:11 EST


* David Yu Chen (dychen@xxxxxxxxxxxx) wrote:
> [FILE: 2.6.0-test5/drivers/scsi/scsi_debug.c]
> [FUNC: sdebug_add_adapter]
> [LINES: 1612-1652]
> [VAR: sdbg_devinfo]
> 1607: memset(sdbg_host, 0, sizeof(*sdbg_host));
> 1608: INIT_LIST_HEAD(&sdbg_host->dev_info_list);
> 1609:
> 1610: devs_per_host = scsi_debug_num_tgts * scsi_debug_max_luns;
> 1611: for (k = 0; k < devs_per_host; k++) {
> START -->
> 1612: sdbg_devinfo = kmalloc(sizeof(*sdbg_devinfo),GFP_KERNEL);
> 1613: if (NULL == sdbg_devinfo) {
> 1614: printk(KERN_ERR "%s: out of memory at line %d\n",
> 1615: __FUNCTION__, __LINE__);
> 1616: error = -ENOMEM;
> GOTO -->
> 1617: goto clean1;
> ... DELETED 29 lines ...
> 1647: kfree(sdbg_devinfo);
> 1648: }
> 1649:
> 1650:clean1:
> 1651: kfree(sdbg_host);
> END -->
> 1652: return error;

Yes, this could leak sdbg_devinfo structs. Patch below. James, look ok?

thanks,
-chris

===== drivers/scsi/scsi_debug.c 1.44 vs edited =====
--- 1.44/drivers/scsi/scsi_debug.c Fri Aug 15 10:07:53 2003
+++ edited/drivers/scsi/scsi_debug.c Mon Sep 22 15:27:17 2003
@@ -1614,7 +1614,7 @@
printk(KERN_ERR "%s: out of memory at line %d\n",
__FUNCTION__, __LINE__);
error = -ENOMEM;
- goto clean1;
+ goto clean;
}
memset(sdbg_devinfo, 0, sizeof(*sdbg_devinfo));
sdbg_devinfo->sdbg_host = sdbg_host;
@@ -1634,12 +1634,12 @@
error = device_register(&sdbg_host->dev);

if (error)
- goto clean2;
+ goto clean;

++scsi_debug_add_host;
return error;

-clean2:
+clean:
list_for_each_safe(lh, lh_sf, &sdbg_host->dev_info_list) {
sdbg_devinfo = list_entry(lh, struct sdebug_dev_info,
dev_list);
@@ -1647,7 +1647,6 @@
kfree(sdbg_devinfo);
}

-clean1:
kfree(sdbg_host);
return error;
}
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/