Found by 'make -C tests valgrind'.
xen_xm.c: Dummy allocation via virDomainChrDefNew is directly
overwritten and lost. Free 'script' in success path too.
vmx.c: Free virtualDev_string in success path too.
domain_conf.c: Free compression in success path too.
---
src/conf/domain_conf.c | 1 +
src/vmx/vmx.c | 16 +++++++++-------
src/xenxs/xen_xm.c | 3 +--
3 files changed, 11 insertions(+), 9 deletions(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 381e692..0e7aeb5 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -4058,6 +4058,7 @@ virDomainGraphicsDefParseXML(xmlNodePtr node, int flags) {
VIR_FREE(compression);
goto error;
}
+ VIR_FREE(compression);
def->data.spice.zlib = compressionVal;
} else if (xmlStrEqual(cur->name, BAD_CAST "playback")) {
diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c
index daeedc3..aee2d80 100644
--- a/src/vmx/vmx.c
+++ b/src/vmx/vmx.c
@@ -1818,6 +1818,7 @@ int
virVMXParseSCSIController(virConfPtr conf, int controller, bool *present,
int *virtualDev)
{
+ int result = -1;
char present_name[32];
char virtualDev_name[32];
char *virtualDev_string = NULL;
@@ -1840,16 +1841,17 @@ virVMXParseSCSIController(virConfPtr conf, int controller, bool
*present,
controller);
if (virVMXGetConfigBoolean(conf, present_name, present, false, true) < 0) {
- goto failure;
+ goto cleanup;
}
if (! *present) {
- return 0;
+ result = 0;
+ goto cleanup;
}
if (virVMXGetConfigString(conf, virtualDev_name, &virtualDev_string,
true) < 0) {
- goto failure;
+ goto cleanup;
}
if (virtualDev_string != NULL) {
@@ -1870,16 +1872,16 @@ virVMXParseSCSIController(virConfPtr conf, int controller, bool
*present,
_("Expecting VMX entry '%s' to be 'buslogic'
or 'lsilogic' "
"or 'lsisas1068' or 'pvscsi' but found
'%s'"),
virtualDev_name, virtualDev_string);
- goto failure;
+ goto cleanup;
}
}
- return 0;
+ result = 0;
- failure:
+ cleanup:
VIR_FREE(virtualDev_string);
- return -1;
+ return result;
}
diff --git a/src/xenxs/xen_xm.c b/src/xenxs/xen_xm.c
index dbcaf15..63ba153 100644
--- a/src/xenxs/xen_xm.c
+++ b/src/xenxs/xen_xm.c
@@ -983,8 +983,6 @@ xenParseXM(virConfPtr conf, int xendConfigVersion,
continue;
}
- if (!(chr = virDomainChrDefNew()))
- goto cleanup;
if (!(chr = xenParseSxprChar(port, NULL)))
goto cleanup;
@@ -1034,6 +1032,7 @@ xenParseXM(virConfPtr conf, int xendConfigVersion,
goto cleanup;
}
+ VIR_FREE(script);
return def;
no_memory:
--
1.7.0.4
Show replies by date
On 04/24/2011 04:26 PM, Matthias Bolte wrote:
Found by 'make -C tests valgrind'.
xen_xm.c: Dummy allocation via virDomainChrDefNew is directly
overwritten and lost. Free 'script' in success path too.
vmx.c: Free virtualDev_string in success path too.
domain_conf.c: Free compression in success path too.
---
src/conf/domain_conf.c | 1 +
src/vmx/vmx.c | 16 +++++++++-------
src/xenxs/xen_xm.c | 3 +--
3 files changed, 11 insertions(+), 9 deletions(-)
ACK to all three fixes.
--
Eric Blake eblake(a)redhat.com +1-801-349-2682
Libvirt virtualization library
http://libvirt.org
2011/4/25 Eric Blake <eblake(a)redhat.com>:
On 04/24/2011 04:26 PM, Matthias Bolte wrote:
> Found by 'make -C tests valgrind'.
>
> xen_xm.c: Dummy allocation via virDomainChrDefNew is directly
> overwritten and lost. Free 'script' in success path too.
>
> vmx.c: Free virtualDev_string in success path too.
>
> domain_conf.c: Free compression in success path too.
> ---
> src/conf/domain_conf.c | 1 +
> src/vmx/vmx.c | 16 +++++++++-------
> src/xenxs/xen_xm.c | 3 +--
> 3 files changed, 11 insertions(+), 9 deletions(-)
ACK to all three fixes.
Thanks, pushed.
Matthias