mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-10 23:07:44 +00:00
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.
This commit is contained in:
parent
ceb3e59530
commit
c264ea58e9
@ -1851,9 +1851,12 @@ virStorageSourceCopy(const virStorageSource *src,
|
||||
VIR_STRDUP(ret->compat, src->compat) < 0)
|
||||
goto error;
|
||||
|
||||
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)))
|
||||
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;
|
||||
|
Loading…
Reference in New Issue
Block a user