Recent changes to the -M/--machine processing code in qemuParseCommandLine
caused Coverity to determine there was a possible resource leak with how
the 'list' is managed. Rather than try to add virStringFreeList calls
everywhere - just promote list to the top of the variables and free it
within the error processing code. Also required a couple of other tweaks
in order to avoid double free's.
Signed-off-by: John Ferlan <jferlan(a)redhat.com>
---
src/qemu/qemu_command.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 3ccd35d..411b7a4 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -12382,6 +12382,7 @@ qemuParseCommandLine(virCapsPtr qemuCaps,
size_t i;
bool nographics = false;
bool fullscreen = false;
+ char **list = NULL;
char *path;
size_t nnics = 0;
const char **nics = NULL;
@@ -12849,7 +12850,6 @@ qemuParseCommandLine(virCapsPtr qemuCaps,
VIR_FREE(def->name);
} else if (STREQ(arg, "-M") ||
STREQ(arg, "-machine")) {
- char **list;
char *param;
size_t j = 0;
@@ -12864,10 +12864,8 @@ qemuParseCommandLine(virCapsPtr qemuCaps,
if (STRPREFIX(param, "type="))
param += strlen("type=");
if (!strchr(param, '=')) {
- if (VIR_STRDUP(def->os.machine, param) < 0) {
- virStringFreeList(list);
+ if (VIR_STRDUP(def->os.machine, param) < 0)
goto error;
- }
j++;
}
@@ -12912,6 +12910,7 @@ qemuParseCommandLine(virCapsPtr qemuCaps,
}
}
virStringFreeList(list);
+ list = NULL;
} else if (STREQ(arg, "-serial")) {
WANT_VALUE();
if (STRNEQ(val, "none")) {
@@ -13385,6 +13384,7 @@ qemuParseCommandLine(virCapsPtr qemuCaps,
virDomainDiskDefFree(disk);
qemuDomainCmdlineDefFree(cmd);
virDomainDefFree(def);
+ virStringFreeList(list);
VIR_FREE(nics);
if (monConfig) {
virDomainChrSourceDefFree(*monConfig);
--
2.1.0