qga/commands-win32.c | 2 ++ 1 file changed, 2 insertions(+)
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.
Signed-off-by: Peng Ji <peng.ji@smartx.com>
---
qga/commands-win32.c | 2 ++
1 file changed, 2 insertions(+)
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(
--
2.27.0
On 27/12/23 08:15, peng.ji@smartx.com wrote: > 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. > > Signed-off-by: Peng Ji <peng.ji@smartx.com> Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2075 > --- > qga/commands-win32.c | 2 ++ > 1 file changed, 2 insertions(+) > > 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(
ping ! please review this patch : https://patchew.org/QEMU/20231227071540.4035803-1-peng.ji@smartx.com/ thanks On Fri, Jan 5, 2024 at 9:47 PM Philippe Mathieu-Daudé <philmd@linaro.org> wrote: > On 27/12/23 08:15, peng.ji@smartx.com wrote: > > 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. > > > > Signed-off-by: Peng Ji <peng.ji@smartx.com> > > Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2075 > > > --- > > qga/commands-win32.c | 2 ++ > > 1 file changed, 2 insertions(+) > > > > 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( > >
Reviewed-by: Konstantin Kostiuk <kkostiuk@redhat.com> On Wed, Jan 10, 2024 at 9:42 AM Peng Ji <peng.ji@smartx.com> wrote: > ping ! > please review this patch : https://patchew.org/QEMU/20231227071540.4035803-1-peng.ji@smartx.com/ > > thanks > > > > On Fri, Jan 5, 2024 at 9:47 PM Philippe Mathieu-Daudé <philmd@linaro.org> > wrote: > >> On 27/12/23 08:15, peng.ji@smartx.com wrote: >> > 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. >> > >> > Signed-off-by: Peng Ji <peng.ji@smartx.com> >> >> Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2075 >> >> > --- >> > qga/commands-win32.c | 2 ++ >> > 1 file changed, 2 insertions(+) >> > >> > 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( >> >>
© 2016 - 2024 Red Hat, Inc.