1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-03-07 17:28:15 +00:00

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 <pkrempa@redhat.com>
Reviewed-by: Tim Wiederhake <twiederh@redhat.com>
This commit is contained in:
Peter Krempa 2021-07-23 10:55:20 +02:00
parent e908a8e0e2
commit 3a95187289

View 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);
}