[libvirt] [PATCH 05/12] util: storage: Copy hosts of a storage file only if they exist

John Ferlan jferlan at redhat.com
Thu Nov 20 15:10:36 UTC 2014



On 11/12/2014 08:47 AM, Peter Krempa wrote:
> If there are no hosts for a storage source virStorageSourceCopy would
> try to copy them anyways. As the success of virStorageNetHostDefCopy is
> determined by returning a pointer and malloc of 0 elements might return
> NULL according to the implementation, the result of the copy function
> may vary.
> 
> Fix this by copying the hosts array only if there are hosts defined.
> ---
>  src/util/virstoragefile.c | 9 ++++++---
>  1 file changed, 6 insertions(+), 3 deletions(-)
> 

I see 'virStorageSourceNewFromBackingRelative' also has the same issue.
Could use this opportunity to fix that - or modify the API to adjust the
return and only do the alloc if source->nhosts > 0.

I also note that virStorageNetHostDefCopy is only used in
virstoragefile.c too - cause for statification?

ACK - I'll let you figure the best option...  Definitely need a check in
both callers though.

John
> diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
> index 8e9d115..c2d5b46 100644
> --- a/src/util/virstoragefile.c
> +++ b/src/util/virstoragefile.c
> @@ -1852,9 +1852,12 @@ virStorageSourceCopy(const virStorageSource *src,
>          VIR_STRDUP(ret->compat, src->compat) < 0)
>          goto error;
> 
> -    if (!(ret->hosts = virStorageNetHostDefCopy(src->nhosts, src->hosts)))
> -        goto error;
> -    ret->nhosts = src->nhosts;
> +    if (src->nhosts) {
> +        if (!(ret->hosts = virStorageNetHostDefCopy(src->nhosts, src->hosts)))
> +            goto error;
> +
> +        ret->nhosts = src->nhosts;
> +    }
> 
>      if (src->srcpool &&
>          !(ret->srcpool = virStorageSourcePoolDefCopy(src->srcpool)))
> 




More information about the libvir-list mailing list