diff mbox series

[PULL,3/4] qga-win: Fix guest-get-fsinfo multi-disks collection

Message ID 20240130105856.27178-4-kkostiuk@redhat.com (mailing list archive)
State New, archived
Headers show
Series [PULL,1/4] guest-agent: improve help for --allow-rpcs and --block-rpcs | expand

Commit Message

Konstantin Kostiuk Jan. 30, 2024, 10:58 a.m. UTC
From: Peng Ji <peng.ji@smartx.com>

When a volume has more than one disk, all disks cannot be
returned correctly because there is not enough malloced memory
for disk extents, so before executing DeviceIoControl for the
second time, get the correct size of the required memory space
to store all disk extents.

Details:
https://learn.microsoft.com/en-us/windows/win32/api/winioctl/ns-winioctl-volume_disk_extents

Signed-off-by: Peng Ji <peng.ji@smartx.com>
Reviewed-by: Konstantin Kostiuk <kkostiuk@redhat.com>
Signed-off-by: Konstantin Kostiuk <kkostiuk@redhat.com>
---
 qga/commands-win32.c | 2 ++
 1 file changed, 2 insertions(+)
diff mbox series

Patch

diff --git a/qga/commands-win32.c b/qga/commands-win32.c
index 697c65507c..a1015757d8 100644
--- a/qga/commands-win32.c
+++ b/qga/commands-win32.c
@@ -935,6 +935,8 @@  static GuestDiskAddressList *build_guest_disk_info(char *guid, Error **errp)
         DWORD last_err = GetLastError();
         if (last_err == ERROR_MORE_DATA) {
             /* Try once more with big enough buffer */
+            size = sizeof(VOLUME_DISK_EXTENTS) +
+               (sizeof(DISK_EXTENT) * (extents->NumberOfDiskExtents - 1));
             g_free(extents);
             extents = g_malloc0(size);
             if (!DeviceIoControl(