]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: process: Don't leak priv->usbaddrs after VM restart
authorPeter Krempa <pkrempa@redhat.com>
Wed, 26 Apr 2017 07:57:39 +0000 (09:57 +0200)
committerCole Robinson <crobinso@redhat.com>
Wed, 10 May 2017 22:02:39 +0000 (18:02 -0400)
Since the private data structure is not freed upon stopping a VM, the
usbaddrs pointer would be leaked:

==15388== 136 (16 direct, 120 indirect) bytes in 1 blocks are definitely lost in loss record 893 of 1,019
==15388==    at 0x4C2CF55: calloc (vg_replace_malloc.c:711)
==15388==    by 0x54BF64A: virAlloc (viralloc.c:144)
==15388==    by 0x5547588: virDomainUSBAddressSetCreate (domain_addr.c:1608)
==15388==    by 0x144D38A2: qemuDomainAssignUSBAddresses (qemu_domain_address.c:2458)
==15388==    by 0x144D38A2: qemuDomainAssignAddresses (qemu_domain_address.c:2515)
==15388==    by 0x144ED1E3: qemuProcessPrepareDomain (qemu_process.c:5398)
==15388==    by 0x144F51FF: qemuProcessStart (qemu_process.c:5979)
[...]

(cherry picked from commit 3ab802d689796ebac6545267d5db248e13a9a0e6)

src/qemu/qemu_process.c

index b06b1188bf45af940822c7a648fc07279cb2d498..f0e59344a03a2733568fa407b0a78ac33f80e1a8 100644 (file)
@@ -6437,6 +6437,10 @@ void qemuProcessStop(virQEMUDriverPtr driver,
     virBitmapFree(priv->autoCpuset);
     priv->autoCpuset = NULL;
 
+    /* remove address data */
+    virDomainUSBAddressSetFree(priv->usbaddrs);
+    priv->usbaddrs = NULL;
+
     /* The "release" hook cleans up additional resources */
     if (virHookPresent(VIR_HOOK_DRIVER_QEMU)) {
         char *xml = qemuDomainDefFormatXML(driver, vm->def, 0);