]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemuDomainDiskPrivateDispose: Prevent dangling 'disk' pointer in blockjob data
authorPeter Krempa <pkrempa@redhat.com>
Tue, 11 Jun 2024 13:50:52 +0000 (15:50 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Thu, 20 Jun 2024 07:52:54 +0000 (09:52 +0200)
Clear the 'disk' member of 'blockjob' as we're freeing the disk object
at this point. While this should not normally happen it was observed
when other bug allowed the VM to be cleared while other threads didn't
yet finish.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/qemu/qemu_domain.c

index 7ba2ea4a5e3d8d19fe9802238c1f6c624b9804f0..a39f361a642f8aad65070899c97184da15e2aa0f 100644 (file)
@@ -798,7 +798,13 @@ qemuDomainDiskPrivateDispose(void *obj)
     virObjectUnref(priv->migrSource);
     g_free(priv->qomName);
     g_free(priv->nodeCopyOnRead);
-    virObjectUnref(priv->blockjob);
+    if (priv->blockjob) {
+        /* Prevent dangling 'disk' pointer, as the disk object will be freed
+         * right after this function returns if any of the blockjob instance
+         * outlives this for any reason. */
+        priv->blockjob->disk = NULL;
+        virObjectUnref(priv->blockjob);
+    }
 }
 
 static virClass *qemuDomainStorageSourcePrivateClass;