[libvirt] [PATCH] vbox_tmpl.c: avoid leak on OOM error path
Matthias Bolte
matthias.bolte at googlemail.com
Mon Feb 15 18:08:55 UTC 2010
2010/2/15 Jim Meyering <jim at meyering.net>:
> Matthias Bolte wrote:
> ...
>> If you look closely at what the function does with the
>> virNetworkDefPtr def, you see that it fills it with information and
>> calls virNetworkDefFormat in the end. So def is never returned from
>> the function and leaks in the successful-return path. I suggest this
>> patch instead:
>>
>> diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c
>> index 68dffd2..d1a701e 100644
>> --- a/src/vbox/vbox_tmpl.c
>> +++ b/src/vbox/vbox_tmpl.c
>> @@ -6183,6 +6183,7 @@ static char *vboxNetworkDumpXML(virNetworkPtr
>> network, int flags ATTRIBUTE_UNUSE
>> ret = virNetworkDefFormat(def);
>>
>> cleanup:
>> + virNetworkDefFree(def);
>> VIR_FREE(networkNameUtf8);
>> return ret;
>> }
>
> Good point. Definite improvement.
> Here you go:
>
> From 1dc101a80c3af855c72e8dbc64fbeb91614c49b4 Mon Sep 17 00:00:00 2001
> From: Jim Meyering <meyering at redhat.com>
> Date: Mon, 15 Feb 2010 17:54:15 +0100
> Subject: [PATCH] vbox_tmpl.c: avoid an unconditional leak
>
> * src/vbox/vbox_tmpl.c (vboxDomainDumpXML): Free def.
> Improved by Matthias Bolte.
> ---
> src/vbox/vbox_tmpl.c | 1 +
> 1 files changed, 1 insertions(+), 0 deletions(-)
>
> diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c
> index 68dffd2..751fe52 100644
> --- a/src/vbox/vbox_tmpl.c
> +++ b/src/vbox/vbox_tmpl.c
> @@ -6183,6 +6183,7 @@ static char *vboxNetworkDumpXML(virNetworkPtr network, int flags ATTRIBUTE_UNUSE
> ret = virNetworkDefFormat(def);
>
> cleanup:
> + VIR_FREE(def);
No, a simple VIR_FREE isn't enough here. At this point def can
contains allocated parts. It's necessary to call
virNetworkDefFree(def) here. virNetworkDefFree takes care of freeing
all parts of def and def itself.
> VIR_FREE(networkNameUtf8);
> return ret;
> }
> --
> 1.7.0.181.g41533
>
Matthias
More information about the libvir-list
mailing list