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 <pkrempa@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
This commit is contained in:
Peter Krempa 2022-05-18 10:49:34 +02:00
parent 45064119c1
commit decc03857f

View File

@ -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;
}
}