[libvirt] [PATCH] qemu: Fix memory leaks
Eric Blake
eblake at redhat.com
Sat Dec 31 23:42:48 UTC 2011
On 12/31/2011 02:59 AM, ajia at redhat.com wrote:
> From: Alex Jia <ajia at redhat.com>
>
> Detected by Coverity. Leaks introduced in commit 93ab585 and
> commit e8d6b29.
>
> Signed-off-by: Alex Jia <ajia at redhat.com>
> ---
> src/qemu/qemu_driver.c | 6 +++---
> 1 files changed, 3 insertions(+), 3 deletions(-)
>
Part 2:
> @@ -7867,7 +7868,7 @@ qemuDomainSetInterfaceParameters(virDomainPtr dom,
> virDomainDefPtr persistentDef = NULL;
> int ret = -1;
> virDomainNetDefPtr net = NULL, persistentNet = NULL;
> - virNetDevBandwidthPtr bandwidth = NULL;
> + virNetDevBandwidthPtr bandwidth = NULL, newBandwidth = NULL;
>
> virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
> VIR_DOMAIN_AFFECT_CONFIG, -1);
> @@ -7989,8 +7990,6 @@ qemuDomainSetInterfaceParameters(virDomainPtr dom,
> }
>
> if (flags & VIR_DOMAIN_AFFECT_LIVE) {
> - virNetDevBandwidthPtr newBandwidth;
> -
> if (VIR_ALLOC(newBandwidth) < 0) {
> virReportOOMError();
> goto cleanup;
> @@ -8056,6 +8055,7 @@ qemuDomainSetInterfaceParameters(virDomainPtr dom,
> ret = 0;
> cleanup:
> virNetDevBandwidthFree(bandwidth);
> + virNetDevBandwidthFree(newBandwidth);
> virCgroupFree(&group);
> if (vm)
> virDomainObjUnlock(vm);
ACK, but I'm also squashing this in before pushing (VIR_ALLOC guarantees
0 initialization so memset is not needed; fix some grammar in a comment,
and avoid long lines):
diff --git i/src/qemu/qemu_driver.c w/src/qemu/qemu_driver.c
index 0885a5e..e93fe87 100644
--- i/src/qemu/qemu_driver.c
+++ w/src/qemu/qemu_driver.c
@@ -7991,20 +7991,20 @@ qemuDomainSetInterfaceParameters(virDomainPtr dom,
goto cleanup;
}
- memset(newBandwidth, 0, sizeof(newBandwidth));
-
/* virNetDevBandwidthSet() will clear any previous value of
* bandwidth parameters, so merge with old bandwidth parameters
- * here to prevent them from losing. */
+ * here to prevent them from being lost. */
if (bandwidth->in || net->bandwidth->in) {
if (VIR_ALLOC(newBandwidth->in) < 0) {
virReportOOMError();
goto cleanup;
}
if (bandwidth->in)
- memcpy(newBandwidth->in, bandwidth->in,
sizeof(*newBandwidth->in));
+ memcpy(newBandwidth->in, bandwidth->in,
+ sizeof(*newBandwidth->in));
else if (net->bandwidth->in)
- memcpy(newBandwidth->in, net->bandwidth->in,
sizeof(*newBandwidth->in));
+ memcpy(newBandwidth->in, net->bandwidth->in,
+ sizeof(*newBandwidth->in));
}
if (bandwidth->out || net->bandwidth->out) {
if (VIR_ALLOC(newBandwidth->out) < 0) {
@@ -8012,9 +8012,11 @@ qemuDomainSetInterfaceParameters(virDomainPtr dom,
goto cleanup;
}
if (bandwidth->out)
- memcpy(newBandwidth->out, bandwidth->out,
sizeof(*newBandwidth->out));
+ memcpy(newBandwidth->out, bandwidth->out,
+ sizeof(*newBandwidth->out));
else if (net->bandwidth->out)
- memcpy(newBandwidth->out, net->bandwidth->out,
sizeof(*newBandwidth->out));
+ memcpy(newBandwidth->out, net->bandwidth->out,
+ sizeof(*newBandwidth->out));
}
if (virNetDevBandwidthSet(net->ifname, newBandwidth) < 0) {
--
Eric Blake eblake at redhat.com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 620 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20111231/58e95545/attachment-0001.sig>
More information about the libvir-list
mailing list