[libvirt] [PATCH] virsh: avoid memory leak on cmdVolCreateAs

Alex Jia ajia at redhat.com
Fri Sep 2 02:32:09 UTC 2011


On 09/02/2011 02:41 AM, Eric Blake wrote:
> On 09/01/2011 11:12 AM, Alex Jia wrote:
>> * tools/virsh.c: fix memory leak on cmdVolCreateAs function.
>>
>
>> % valgrind -v --leak-check=full virsh vol-create-as default foo.img 
>> 10M \
>>    --allocation 0 --format qcow2 --backing-vol bar.img
>>
>> Notes: bar.img doesn't exist.
>>
>> Signed-off-by: Alex Jia<ajia at redhat.com>
>> ---
>>   tools/virsh.c |    2 +-
>>   1 files changed, 1 insertions(+), 1 deletions(-)
>>
>> diff --git a/tools/virsh.c b/tools/virsh.c
>> index f9bcd2c..44c2f1c 100644
>> --- a/tools/virsh.c
>> +++ b/tools/virsh.c
>> @@ -8166,7 +8166,7 @@ cmdVolCreateAs(vshControl *ctl, const vshCmd *cmd)
>>           }
>>           if (snapVol == NULL) {
>>               vshError(ctl, _("failed to get vol '%s'"), 
>> snapshotStrVol);
>> -            return false;
>> +            goto cleanup;
>
> Incomplete.  There were a couple other early returns in this function. 
> I'm pushing with this squashed in:
>
>
> diff --git i/tools/virsh.c w/tools/virsh.c
> index 7453995..5c5343e 100644
> --- i/tools/virsh.c
> +++ w/tools/virsh.c
> @@ -8211,7 +8211,7 @@ cmdVolCreateAs(vshControl *ctl, const vshCmd *cmd)
>          char *snapshotStrVolPath;
>          if ((snapshotStrVolPath = virStorageVolGetPath(snapVol)) == 
> NULL) {
>              virStorageVolFree(snapVol);
> -            return false;
> +            goto cleanup;
>          }
>
>          /* Create XML for the backing store */
> @@ -8230,7 +8230,7 @@ cmdVolCreateAs(vshControl *ctl, const vshCmd *cmd)
>
>      if (virBufferError(&buf)) {
>          vshPrint(ctl, "%s", _("Failed to allocate XML buffer"));
> -        return false;
> +        goto cleanup;
>      }
>      xml = virBufferContentAndReset(&buf);
>      vol = virStorageVolCreateXML(pool, xml, 0);
>
Yeah, should release memory before returning.

Thanks,
Alex




More information about the libvir-list mailing list