[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [libvirt] [PATCH] qemu: Fix memory leaks



On 12/31/2011 02:59 AM, ajia redhat com wrote:
> From: Alex Jia <ajia redhat com>
> 
> Detected by Coverity. Leaks introduced in commit 93ab585 and
> commit e8d6b29. 
> 
> Signed-off-by: Alex Jia <ajia 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 redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

Attachment: signature.asc
Description: OpenPGP digital signature


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]