]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemuDomainObjPrivateAlloc: Fix unlikely memory leak
authorPeter Krempa <pkrempa@redhat.com>
Fri, 23 Jul 2021 08:55:20 +0000 (10:55 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Mon, 26 Jul 2021 11:27:30 +0000 (13:27 +0200)
Additional cleanup paths add the possibility of not freeing earlier
stuff. Add an AUTOPTR handler for qemuDomainObjPrivate and use it in
qemuDomainObjPrivateAlloc

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Tim Wiederhake <twiederh@redhat.com>
src/qemu/qemu_domain.c

index 8d1ecc01406636b2c8178ad0d89ac5fc71574ed9..7e2efc81683e2fe3f4d58a2be7076ccfcf56b94b 100644 (file)
@@ -1891,22 +1891,22 @@ qemuDomainObjPrivateFree(void *data)
     g_free(priv);
 }
 
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(qemuDomainObjPrivate, qemuDomainObjPrivateFree);
+
 
 static void *
 qemuDomainObjPrivateAlloc(void *opaque)
 {
-    qemuDomainObjPrivate *priv;
-
-    priv = g_new0(qemuDomainObjPrivate, 1);
+    g_autoptr(qemuDomainObjPrivate) priv = g_new0(qemuDomainObjPrivate, 1);
 
     if (qemuDomainObjInitJob(&priv->job, &qemuPrivateJobCallbacks) < 0) {
         virReportSystemError(errno, "%s",
                              _("Unable to init qemu driver mutexes"));
-        goto error;
+        return NULL;
     }
 
     if (!(priv->devs = virChrdevAlloc()))
-        goto error;
+        return NULL;
 
     priv->blockjobs = virHashNew(virObjectFreeHashData);
 
@@ -1915,11 +1915,7 @@ qemuDomainObjPrivateAlloc(void *opaque)
     priv->migMaxBandwidth = QEMU_DOMAIN_MIG_BANDWIDTH_MAX;
     priv->driver = opaque;
 
-    return priv;
-
- error:
-    VIR_FREE(priv);
-    return NULL;
+    return g_steal_pointer(&priv);
 }