On 01/09/2013 11:55 AM, Laine Stump wrote: > (you duplicated "resource" in the subject line) > Missed that one... Will fix. > On 01/09/2013 09:54 AM, John Ferlan wrote: >> Make cpuset local to the while loop and free it once done with it each >> time through the loop. >> --- >> src/xen/xend_internal.c | 12 ++++++------ >> 1 file changed, 6 insertions(+), 6 deletions(-) >> >> diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c >> index 84a25e8..c6b800b 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 >> */ >> @@ -1152,8 +1152,10 @@ sexpr_to_xend_topology(const struct sexpr *root, >> goto memory_error; >> } else { >> nb_cpus = virBitmapParse(cur, 'n', &cpuset, numCpus); >> - if (nb_cpus < 0) >> + if (nb_cpus < 0) { >> + virBitmapFree(cpuset); > > This virBitmapFree() isn't necessary - virBitmapParse is guaranteed to > have nothing allocated (and will set cpuset = NULL) if it fails. > According to Coverity's analysis this may not be true since it's "possible" to hit the "ret--" line (more than once) in virBitmapParse() while hitting either "ret++" line less times returning a negative value on the "success" path. The example Coverity had shows 6 passes through the loop, 4 negatives, 1 positive, and 1 nothing. Whether realistically this could be true, I am not sure. How Coverity determined what the value of 'cpuSet' is a mystery as the output I have doesn't show what's being used for parsing, just that we go through the loop 6 times. Perhaps something like "^1,^2,^3,4,^5,^6" where 1,2,3,4,5,6 pass the virBitmapIsSet() call changing the 'ret' value to -3. >> goto error; >> + } >> } >> >> for (n = 0, cpu = 0; cpu < numCpus; cpu++) { >> @@ -1163,28 +1165,26 @@ sexpr_to_xend_topology(const struct sexpr *root, >> if (used) >> cpuNums[n++] = cpu; >> } >> + virBitmapFree(cpuset); >> >> 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; >> } > > ACK with the above nits fixed. > > -- > libvir-list mailing list > libvir-list@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/libvir-list > -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list