From decc03857f091c05efea3eaf28546cdeb39c0f1e Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Wed, 18 May 2022 10:49:34 +0200 Subject: [PATCH] virGetConnectGeneric: Fix memleak of 'identparams' when connecting between split daemons The 'identparams' typed parameter list obtained from virIdentityGetParameters is leaked when called from 'virGetConnectGeneric'. Use 'virTypedParamListFromParams' to absorb it into a virTypedParamList which can be autofreed. Note that the memleak is observable only when running in split-daemon mode. Closes: https://gitlab.com/libvirt/libvirt/-/issues/314 Signed-off-by: Peter Krempa Reviewed-by: Pavel Hrdina --- src/driver.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/driver.c b/src/driver.c index 41b4f0055b..d4136c438f 100644 --- a/src/driver.c +++ b/src/driver.c @@ -36,6 +36,7 @@ #include "viridentity.h" #include "datatypes.h" #include "configmake.h" +#include "virtypedparam.h" VIR_LOG_INIT("driver"); @@ -159,6 +160,7 @@ virGetConnectGeneric(virThreadLocal *threadPtr, const char *name) if (conn->driver->connectSetIdentity != NULL) { g_autoptr(virIdentity) ident = NULL; + g_autoptr(virTypedParamList) paramlist = NULL; virTypedParameterPtr identparams = NULL; int nidentparams = 0; @@ -169,7 +171,9 @@ virGetConnectGeneric(virThreadLocal *threadPtr, const char *name) if (virIdentityGetParameters(ident, &identparams, &nidentparams) < 0) goto error; - if (virConnectSetIdentity(conn, identparams, nidentparams, 0) < 0) + paramlist = virTypedParamListFromParams(&identparams, nidentparams); + + if (virConnectSetIdentity(conn, paramlist->par, paramlist->npar, 0) < 0) goto error; } }