From 8bc18eaac6e57ce8897ae8d303defee0ac716676 Mon Sep 17 00:00:00 2001 From: John Ferlan Date: Thu, 10 Jan 2013 12:46:52 -0500 Subject: [PATCH] xen: Resolve resource leak with 'cpuset' Make cpuset local to the while loop and free it once done with it each time through the loop. Add a sa_assert() to virBitmapParse() to keep Coverity from believing there could be a negative return and possible resource leak. --- src/util/virbitmap.c | 1 + src/xen/xend_internal.c | 12 +++--------- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/src/util/virbitmap.c b/src/util/virbitmap.c index e0323742ed..ca82d1be87 100644 --- a/src/util/virbitmap.c +++ b/src/util/virbitmap.c @@ -373,6 +373,7 @@ int virBitmapParse(const char *str, } } + sa_assert(ret >= 0); return ret; parse_error: diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c index 84a25e80c1..959225ccc7 100644 --- a/src/xen/xend_internal.c +++ b/src/xen/xend_internal.c @@ -1113,7 +1113,6 @@ sexpr_to_xend_topology(const struct sexpr *root, { const char *nodeToCpu; const char *cur; - virBitmapPtr cpuset = NULL; int *cpuNums = NULL; int cell, cpu, nb_cpus; int n = 0; @@ -1131,6 +1130,7 @@ sexpr_to_xend_topology(const struct sexpr *root, cur = nodeToCpu; while (*cur != 0) { + virBitmapPtr cpuset = NULL; /* * Find the next NUMA cell described in the xend output */ @@ -1163,28 +1163,22 @@ sexpr_to_xend_topology(const struct sexpr *root, if (used) cpuNums[n++] = cpu; } + virBitmapFree(cpuset); - if (virCapabilitiesAddHostNUMACell(caps, - cell, - nb_cpus, - cpuNums) < 0) + if (virCapabilitiesAddHostNUMACell(caps, cell, nb_cpus, cpuNums) < 0) goto memory_error; } VIR_FREE(cpuNums); - virBitmapFree(cpuset); return 0; parse_error: virReportError(VIR_ERR_XEN_CALL, "%s", _("topology syntax error")); error: VIR_FREE(cpuNums); - virBitmapFree(cpuset); - return -1; memory_error: VIR_FREE(cpuNums); - virBitmapFree(cpuset); virReportOOMError(); return -1; }