mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-22 11:22:23 +00:00
qemu: Don't crash when getting targets for a multipath
In one of my previous commits I've introduced code that creates all devices for given (possible) multipath target. But I've made a mistake there - the code accesses 'next->path' without checking if the disk source is local. Note that the 'next->path' is NULL/doesn't make sense for VIR_STORAGE_TYPE_NVME. Fixes: a30078cb832646177defd256e77c632905f1e6d0 Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1814947 Signed-off-by: Michal Privoznik <mprivozn@redhat.com> Reviewed-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
7b09dc0a78
commit
aeb909bf9b
@ -15846,7 +15846,6 @@ qemuDomainNamespaceSetupDisk(virDomainObjPtr vm,
|
||||
bool hasNVMe = false;
|
||||
|
||||
for (next = src; virStorageSourceIsBacking(next); next = next->backingStore) {
|
||||
VIR_AUTOSTRINGLIST targetPaths = NULL;
|
||||
g_autofree char *tmpPath = NULL;
|
||||
|
||||
if (next->type == VIR_STORAGE_TYPE_NVME) {
|
||||
@ -15855,6 +15854,8 @@ qemuDomainNamespaceSetupDisk(virDomainObjPtr vm,
|
||||
if (!(tmpPath = virPCIDeviceAddressGetIOMMUGroupDev(&next->nvme->pciAddr)))
|
||||
return -1;
|
||||
} else {
|
||||
VIR_AUTOSTRINGLIST targetPaths = NULL;
|
||||
|
||||
if (virStorageSourceIsEmpty(next) ||
|
||||
!virStorageSourceIsLocalStorage(next)) {
|
||||
/* Not creating device. Just continue. */
|
||||
@ -15862,21 +15863,21 @@ qemuDomainNamespaceSetupDisk(virDomainObjPtr vm,
|
||||
}
|
||||
|
||||
tmpPath = g_strdup(next->path);
|
||||
|
||||
if (virDevMapperGetTargets(next->path, &targetPaths) < 0 &&
|
||||
errno != ENOSYS && errno != EBADF) {
|
||||
virReportSystemError(errno,
|
||||
_("Unable to get devmapper targets for %s"),
|
||||
next->path);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (virStringListMerge(&paths, &targetPaths) < 0)
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (virStringListAdd(&paths, tmpPath) < 0)
|
||||
return -1;
|
||||
|
||||
if (virDevMapperGetTargets(next->path, &targetPaths) < 0 &&
|
||||
errno != ENOSYS && errno != EBADF) {
|
||||
virReportSystemError(errno,
|
||||
_("Unable to get devmapper targets for %s"),
|
||||
next->path);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (virStringListMerge(&paths, &targetPaths) < 0)
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* qemu-pr-helper might require access to /dev/mapper/control. */
|
||||
|
Loading…
x
Reference in New Issue
Block a user