Commit b1360baf51 for qemu.org
commit b1360baf5171622b4de1d8366d49d25493fa1f4b
Author: Marc-André Lureau <marcandre.lureau@redhat.com>
Date: Mon Sep 7 14:50:12 2026 +0400
qga/vss-win32: check GetLastError() after FindNextVolumeW failure
FindNextVolumeW returning FALSE can mean either normal end of
enumeration (ERROR_NO_MORE_FILES) or an actual error. The code
treated both cases as end-of-list, silently skipping any remaining
volumes on a real failure.
Distinguish the two by checking GetLastError().
Fixes: b39297aedfab ("qemu-ga: Add Windows VSS provider and requester as DLL")
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Link: https://lore.kernel.org/qemu-devel/20260907-qga-v1-14-86456ad356e2@redhat.com
Signed-off-by: Kostiantyn Kostiuk <kkostiuk@redhat.com>
diff --git a/qga/vss-win32/requester.cpp b/qga/vss-win32/requester.cpp
index b3daa060ac..f14c47f9f7 100644
--- a/qga/vss-win32/requester.cpp
+++ b/qga/vss-win32/requester.cpp
@@ -461,6 +461,13 @@ void requester_freeze(int *num_vols, void *mountpoints, ErrorSet *errset)
}
if (!FindNextVolumeW(volume, short_volume_name,
ARRAYSIZE(short_volume_name))) {
+ DWORD err = GetLastError();
+ if (err != ERROR_NO_MORE_FILES) {
+ err_set(errset, err,
+ "failed to find next volume");
+ FindVolumeClose(volume);
+ goto out;
+ }
FindVolumeClose(volume);
break;
}