[libvirt] [PATCH] daemon: Fix domain name leak in error path
John Ferlan
jferlan at redhat.com
Thu Apr 13 12:11:02 UTC 2017
On 04/13/2017 06:44 AM, Wang King wrote:
> domain name duplicated in make_nonnull_domain, but not freed when virTypedParamsSerialize return negative.
> ---
> daemon/remote.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/daemon/remote.c b/daemon/remote.c
> index 1610fea..edee981 100644
> --- a/daemon/remote.c
> +++ b/daemon/remote.c
> @@ -1066,8 +1066,10 @@ remoteRelayDomainEventTunable(virConnectPtr conn,
> if (virTypedParamsSerialize(params, nparams,
> (virTypedParameterRemotePtr *) &data.params.params_val,
> &data.params.params_len,
> - VIR_TYPED_PARAM_STRING_OKAY) < 0)
> + VIR_TYPED_PARAM_STRING_OKAY) < 0) {
> + VIR_FREE(data.dom.name);
> return -1;
> + }
While true this does "fix" this instance, it also doesn't seem to be the
only instance [1] of this and isn't handled via "normal" error path
using virObjectUnref(dom); [2]
[1] example of another instance w/ similar code/leak/issue
See also remoteRelayDomainEventJobCompleted
I'll assume this one borrowed from remoteRelayDomainEventTunable
considering which came first.
[2] example of another instance w/ similar code, but no leak
See also remoteDispatchConnectGetAllDomainStats
FWIW: The sequence I used to search on is:
make_nonnull_domain
virTypedParamsSerialize
While looking through the code during review, I noticed a couple of
other possible cleanups. So, if you're feeling adventurous, there's also
two instances where a VIR_STRDUP error is followed by a goto error where
all the error label does is VIR_FREE the address that failed the
VIR_STRDUP and there's no other way to get to the error label... See:
remoteRelayDomainEventBlockJob2
remoteRelayDomainEventBlockJob
It would seem those two could just have a return -1 instead to follow
other similar such error paths:
remoteRelayDomainEventDeviceRemovalFailed
remoteRelayDomainEventDeviceAdded
remoteRelayDomainEventDeviceRemoved
remoteRelayDomainEventTrayChange
John
>
> remoteDispatchObjectEventSend(callback->client, remoteProgram,
> REMOTE_PROC_DOMAIN_EVENT_CALLBACK_TUNABLE,
>
More information about the libvir-list
mailing list