[libvirt] [PATCH] qemu: Fix crash when updating media with shared device

Peter Krempa pkrempa at redhat.com
Tue Apr 2 21:18:58 UTC 2013


Mimic the fix done in 02b9097274d1330c2e1dca7f598880e09b5c2aa0 to fix crash by
accessing an already freed structure. Also copy the explaining comment why the
pointer can't be accessed any more.
---
 src/qemu/qemu_driver.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 96bf235..552a81b 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -6073,14 +6073,17 @@ qemuDomainChangeDiskMediaLive(virDomainObjPtr vm,
             goto end;

         ret = qemuDomainChangeEjectableMedia(driver, vm, disk, orig_disk, force);
+        /* 'disk' must not be accessed now - it has been freed.
+         * 'orig_disk' now points to the new disk, while 'dev_copy'
+         * now points to the old disk */
+
+        /* Need to remove the shared disk entry for the original
+         * disk src if the operation is either ejecting or updating.
+         */
         if (ret == 0) {
             dev->data.disk = NULL;
-            /* Need to remove the shared disk entry for the original
-             * disk src if the operation is either ejecting or updating.
-             */
-            if (orig_disk->src && STRNEQ_NULLABLE(orig_disk->src, disk->src))
-                ignore_value(qemuRemoveSharedDisk(driver, dev_copy->data.disk,
-                                                  vm->def->name));
+            ignore_value(qemuRemoveSharedDisk(driver, dev_copy->data.disk,
+                                              vm->def->name));
         }
         break;
     default:
-- 
1.8.1.5




More information about the libvir-list mailing list