[PATCH 1/2] qemuSnapshotDiskHasBackingDisk: Avoid call of virStorageSourceIsSameLocation with NULL argument

Peter Krempa via Devel posted 2 patches 1 week, 2 days ago
[PATCH 1/2] qemuSnapshotDiskHasBackingDisk: Avoid call of virStorageSourceIsSameLocation with NULL argument
Posted by Peter Krempa via Devel 1 week, 2 days ago
From: Peter Krempa <pkrempa@redhat.com>

When the 'backingStore' pointer is not populated the function calls
'virStorageSourceGetMetadata' to try to populate it but if the on-disk
metadata doesn't have a backing image (e.g. if it's the 'base' image of
the chain) the 'backingStore' pointer will still be NULL.

The function then calls 'virStorageSourceIsSameLocation' but the
internal functions for dealing with storage sources don't handle NULL
gracefully.

Since for the base image there's nothing to update we need to skip the
code if there's no backing store.

Closes: https://gitlab.com/libvirt/libvirt/-/issues/844
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
---
 src/qemu/qemu_snapshot.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/qemu/qemu_snapshot.c b/src/qemu/qemu_snapshot.c
index e738afffc3..8f58df3b45 100644
--- a/src/qemu/qemu_snapshot.c
+++ b/src/qemu/qemu_snapshot.c
@@ -3147,7 +3147,8 @@ qemuSnapshotDiskHasBackingDisk(void *payload,
         if (!disk->src->backingStore)
             ignore_value(virStorageSourceGetMetadata(disk->src, uid, gid, 1, false));

-        if (virStorageSourceIsSameLocation(disk->src->backingStore, iterdata->diskSrc)) {
+        if (disk->src->backingStore &&
+            virStorageSourceIsSameLocation(disk->src->backingStore, iterdata->diskSrc)) {
             struct _qemuSnapshotDisksWithBackingStoreData *data =
                 g_new0(struct _qemuSnapshotDisksWithBackingStoreData, 1);

-- 
2.52.0