[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