From: Peter Krempa Date: Fri, 23 Jul 2021 08:55:20 +0000 (+0200) Subject: qemuDomainObjPrivateAlloc: Fix unlikely memory leak X-Git-Tag: v7.6.0-rc1~14 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3a951872899ff04a3b02be5c9b73934a16fff891;p=thirdparty%2Flibvirt.git qemuDomainObjPrivateAlloc: Fix unlikely memory leak 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 Reviewed-by: Tim Wiederhake --- diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 8d1ecc0140..7e2efc8168 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -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); }