]> xenbits.xensource.com Git - libvirt.git/commitdiff
getstats: avoid memory leak on OOM
authorEric Blake <eblake@redhat.com>
Fri, 5 Dec 2014 23:06:52 +0000 (16:06 -0700)
committerEric Blake <eblake@redhat.com>
Mon, 8 Dec 2014 16:43:35 +0000 (09:43 -0700)
qemuDomainGetStatsBlock() could leak a stats hash table if it
encountered OOM while populating the virTypedParameters.
Oddly, the fix doesn't even touch qemuDomainGetStatsBlock :)

* src/qemu/qemu_driver.c (QEMU_ADD_COUNT_PARAM)
(QEMU_ADD_NAME_PARAM): Don't return early.
(qemuDomainGetStatsInterface): Adjust caller.

Signed-off-by: Eric Blake <eblake@redhat.com>
src/qemu/qemu_driver.c

index 9152cf5e954526ccc4773886feaf3be62dde440e..ed8e140790d0e972f1c344b6046316a964ecd101 100644 (file)
@@ -18371,7 +18371,7 @@ do { \
                               maxparams, \
                               param_name, \
                               count) < 0) \
-        return -1; \
+        goto cleanup; \
 } while (0)
 
 #define QEMU_ADD_NAME_PARAM(record, maxparams, type, num, name) \
@@ -18384,7 +18384,7 @@ do { \
                                 maxparams, \
                                 param_name, \
                                 name) < 0) \
-        return -1; \
+        goto cleanup; \
 } while (0)
 
 #define QEMU_ADD_NET_PARAM(record, maxparams, num, name, value) \
@@ -18409,6 +18409,7 @@ qemuDomainGetStatsInterface(virQEMUDriverPtr driver ATTRIBUTE_UNUSED,
 {
     size_t i;
     struct _virDomainInterfaceStats tmp;
+    int ret = -1;
 
     if (!virDomainObjIsActive(dom))
         return 0;
@@ -18448,7 +18449,9 @@ qemuDomainGetStatsInterface(virQEMUDriverPtr driver ATTRIBUTE_UNUSED,
                            "tx.drop", tmp.tx_drop);
     }
 
-    return 0;
+    ret = 0;
+ cleanup:
+    return ret;
 }
 
 #undef QEMU_ADD_NET_PARAM