]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: hotplug: Don't leak 'disk' if VM crashes during unplug finishing
authorPeter Krempa <pkrempa@redhat.com>
Fri, 13 Jul 2018 10:54:26 +0000 (12:54 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Fri, 20 Jul 2018 12:23:09 +0000 (14:23 +0200)
qemuDomainRemoveDiskDevice would leak the disk to be removed if the VM
crashed since it was removed from the definition but not freed.

Broken in commit 105bcdde76b which moved the removal from the definition
earlier.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_hotplug.c

index 5ba72e792e272f1a4ad654f02b632d541ee7effc..f91055cfbfb157bd9bdc9912c254b3bc760c65bf 100644 (file)
@@ -3864,6 +3864,7 @@ qemuDomainRemoveDiskDevice(virQEMUDriverPtr driver,
     bool prUsed = false;
     const char *authAlias = NULL;
     const char *encAlias = NULL;
+    int ret = -1;
 
     VIR_DEBUG("Removing disk %s from domain %p %s",
               disk->info.alias, vm, vm->def->name);
@@ -3918,7 +3919,7 @@ qemuDomainRemoveDiskDevice(virQEMUDriverPtr driver,
         ignore_value(qemuMonitorDelObject(priv->mon, qemuDomainGetManagedPRAlias()));
 
     if (qemuDomainObjExitMonitor(driver, vm) < 0)
-        return -1;
+        goto cleanup;
 
     virDomainAuditDisk(vm, disk->src, NULL, "detach", true);
 
@@ -3938,8 +3939,11 @@ qemuDomainRemoveDiskDevice(virQEMUDriverPtr driver,
     ignore_value(qemuRemoveSharedDevice(driver, &dev, vm->def->name));
     virDomainUSBAddressRelease(priv->usbaddrs, &disk->info);
 
+    ret = 0;
+
+ cleanup:
     virDomainDiskDefFree(disk);
-    return 0;
+    return ret;
 }