From c264ea58e9a34b7202d8041687621dfa68ad8750 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Thu, 30 Oct 2014 11:52:17 +0100 Subject: [PATCH] util: storage: Copy hosts of a storage file only if they exist If there are no hosts for a storage source virStorageSourceCopy and virStorageSourceNewFromBackingRelative 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 | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c index 1c437a9b0a..8ca2d8d9f9 100644 --- a/src/util/virstoragefile.c +++ b/src/util/virstoragefile.c @@ -1851,9 +1851,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))) @@ -2092,9 +2095,13 @@ virStorageSourceNewFromBackingRelative(virStorageSourcePtr parent, /* copy the host network part */ ret->protocol = parent->protocol; - if (!(ret->hosts = virStorageNetHostDefCopy(parent->nhosts, parent->hosts))) - goto error; - ret->nhosts = parent->nhosts; + if (parent->nhosts) { + if (!(ret->hosts = virStorageNetHostDefCopy(parent->nhosts, + parent->hosts))) + goto error; + + ret->nhosts = parent->nhosts; + } if (VIR_STRDUP(ret->volume, parent->volume) < 0) goto error; -- GitLab