[PATCH] Fix memory leaks in RASD, RAFP, and DevicePool

# HG changeset patch # User Kaitlin Rupert <karupert@us.ibm.com> # Date 1257545021 28800 # Node ID 280a12d7c513129ebf86ac271aac5474161d3aae # Parent 910c18bbb6264c90294375e94882e600f3dd8237 Fix memory leaks in RASD, RAFP, and DevicePool Signed-off-by: Kaitlin Rupert <karupert@us.ibm.com> diff -r 910c18bbb626 -r 280a12d7c513 src/Virt_DevicePool.c --- a/src/Virt_DevicePool.c Thu Nov 05 14:20:54 2009 -0800 +++ b/src/Virt_DevicePool.c Fri Nov 06 14:03:41 2009 -0800 @@ -102,11 +102,14 @@ return 0; *pool = malloc(sizeof(**pool)); - if (*pool == NULL) - return 0; + if (*pool == NULL) { + ret = 0; + goto out; + } ret = get_pool_from_xml(xml, *pool, CIM_RES_TYPE_DISK); + out: free(xml); return ret; @@ -130,30 +133,31 @@ goto out; } + if (virConnectListStoragePools(conn, names, count) == -1) { + CU_DEBUG("Failed to get storage pools"); + goto out; + } + pools = calloc(count, sizeof(*pools)); if (pools == NULL) { CU_DEBUG("Failed to alloc space for %i pool structs", count); goto out; } - if (virConnectListStoragePools(conn, names, count) == -1) { - CU_DEBUG("Failed to get storage pools"); - free(pools); - goto out; - } - for (i = 0; i < count; i++) { pools[i].tag = names[i]; pools[i].primordial = false; } out: + for (i = 0; i < count; i++) + free(names[i]); + free(names); + get_disk_parent(&pools, &count); *_pools = pools; - free(names); - return count; } @@ -464,6 +468,8 @@ free(_bridge); } + for (i = 0; i < num; i++) + free(networks[i]); free(networks); return network; @@ -870,12 +876,12 @@ } set_params(inst, CIM_RES_TYPE_NET, id, NULL, cap, false); - free(id); free(cap); - free(bridge); inst_list_add(list, inst); out: + free(bridge); + free(id); virNetworkFree(network); return s; @@ -890,7 +896,7 @@ CMPIStatus s = {CMPI_RC_OK, NULL}; char **netnames = NULL; int i; - int nets; + int nets = 0; if (id != NULL) { return _netpool_for_network(list, @@ -942,6 +948,8 @@ } out: + for (i = 0; i < nets; i++) + free(netnames[i]); free(netnames); return s; @@ -1350,8 +1358,6 @@ break; } - inst_list_free(&list); - if (inst == NULL) { cu_statusf(broker, s, CMPI_RC_ERR_FAILED, @@ -1362,6 +1368,7 @@ } out: + inst_list_free(&list); return inst; } diff -r 910c18bbb626 -r 280a12d7c513 src/Virt_RASD.c --- a/src/Virt_RASD.c Thu Nov 05 14:20:54 2009 -0800 +++ b/src/Virt_RASD.c Fri Nov 06 14:03:41 2009 -0800 @@ -407,6 +407,8 @@ CLASSNAME(ref), base, NAMESPACE(ref)); + free(base); + if (inst == NULL) return inst; @@ -523,6 +525,8 @@ else *_inst = inst; + cleanup_virt_device(dev); + out: virConnectClose(conn); free(host); @@ -696,6 +700,10 @@ cu_statusf(broker, &s, CMPI_RC_ERR_FAILED, "Failed to get domain name"); + + for (i = 0; i < count; i++) + cleanup_virt_device(&devs[i]); + goto out; } diff -r 910c18bbb626 -r 280a12d7c513 src/Virt_ResourceAllocationFromPool.c --- a/src/Virt_ResourceAllocationFromPool.c Thu Nov 05 14:20:54 2009 -0800 +++ b/src/Virt_ResourceAllocationFromPool.c Fri Nov 06 14:03:41 2009 -0800 @@ -120,6 +120,8 @@ inst_list_add(dest, inst); } + free(poolid); + return dest->cur; }

+1 On 11/06/2009 09:14 PM, Kaitlin Rupert wrote:
# HG changeset patch # User Kaitlin Rupert<karupert@us.ibm.com> # Date 1257545021 28800 # Node ID 280a12d7c513129ebf86ac271aac5474161d3aae # Parent 910c18bbb6264c90294375e94882e600f3dd8237 Fix memory leaks in RASD, RAFP, and DevicePool
Signed-off-by: Kaitlin Rupert<karupert@us.ibm.com>
diff -r 910c18bbb626 -r 280a12d7c513 src/Virt_DevicePool.c --- a/src/Virt_DevicePool.c Thu Nov 05 14:20:54 2009 -0800 +++ b/src/Virt_DevicePool.c Fri Nov 06 14:03:41 2009 -0800 @@ -102,11 +102,14 @@ return 0;
*pool = malloc(sizeof(**pool)); - if (*pool == NULL) - return 0; + if (*pool == NULL) { + ret = 0; + goto out; + }
ret = get_pool_from_xml(xml, *pool, CIM_RES_TYPE_DISK);
+ out: free(xml);
return ret; @@ -130,30 +133,31 @@ goto out; }
+ if (virConnectListStoragePools(conn, names, count) == -1) { + CU_DEBUG("Failed to get storage pools"); + goto out; + } + pools = calloc(count, sizeof(*pools)); if (pools == NULL) { CU_DEBUG("Failed to alloc space for %i pool structs", count); goto out; }
- if (virConnectListStoragePools(conn, names, count) == -1) { - CU_DEBUG("Failed to get storage pools"); - free(pools); - goto out; - } - for (i = 0; i< count; i++) { pools[i].tag = names[i]; pools[i].primordial = false; }
out: + for (i = 0; i< count; i++) + free(names[i]); + free(names); + get_disk_parent(&pools,&count);
*_pools = pools;
- free(names); - return count; }
@@ -464,6 +468,8 @@ free(_bridge); }
+ for (i = 0; i< num; i++) + free(networks[i]); free(networks);
return network; @@ -870,12 +876,12 @@ }
set_params(inst, CIM_RES_TYPE_NET, id, NULL, cap, false); - free(id); free(cap); - free(bridge);
inst_list_add(list, inst); out: + free(bridge); + free(id); virNetworkFree(network);
return s; @@ -890,7 +896,7 @@ CMPIStatus s = {CMPI_RC_OK, NULL}; char **netnames = NULL; int i; - int nets; + int nets = 0;
if (id != NULL) { return _netpool_for_network(list, @@ -942,6 +948,8 @@ }
out: + for (i = 0; i< nets; i++) + free(netnames[i]); free(netnames);
return s; @@ -1350,8 +1358,6 @@ break; }
- inst_list_free(&list); - if (inst == NULL) { cu_statusf(broker, s, CMPI_RC_ERR_FAILED, @@ -1362,6 +1368,7 @@ }
out: + inst_list_free(&list);
return inst; } diff -r 910c18bbb626 -r 280a12d7c513 src/Virt_RASD.c --- a/src/Virt_RASD.c Thu Nov 05 14:20:54 2009 -0800 +++ b/src/Virt_RASD.c Fri Nov 06 14:03:41 2009 -0800 @@ -407,6 +407,8 @@ CLASSNAME(ref), base, NAMESPACE(ref)); + free(base); + if (inst == NULL) return inst;
@@ -523,6 +525,8 @@ else *_inst = inst;
+ cleanup_virt_device(dev); + out: virConnectClose(conn); free(host); @@ -696,6 +700,10 @@ cu_statusf(broker,&s, CMPI_RC_ERR_FAILED, "Failed to get domain name"); + + for (i = 0; i< count; i++) + cleanup_virt_device(&devs[i]); + goto out; }
diff -r 910c18bbb626 -r 280a12d7c513 src/Virt_ResourceAllocationFromPool.c --- a/src/Virt_ResourceAllocationFromPool.c Thu Nov 05 14:20:54 2009 -0800 +++ b/src/Virt_ResourceAllocationFromPool.c Fri Nov 06 14:03:41 2009 -0800 @@ -120,6 +120,8 @@ inst_list_add(dest, inst); }
+ free(poolid); + return dest->cur; }
_______________________________________________ Libvirt-cim mailing list Libvirt-cim@redhat.com https://www.redhat.com/mailman/listinfo/libvirt-cim
-- Richard Maciel, MSc IBM Linux Technology Center rmaciel@linux.vnet.ibm.com
participants (2)
-
Kaitlin Rupert
-
Richard Maciel