The RegionSize member of the MEMORY_BASIC_INFORMATION struct is of type
SIZE_T, and it may be larger than will fit in a DWORD (I observed
0x200000000).  This resulted in an error due to trying to reserve 0
bytes from VirtualAlloc.

Fixes: 8d777a13fcf4 ("* dll_init.cc (reserve_at, release_at): New functions.")
Addresses: https://cygwin.com/pipermail/cygwin/2025-May/258154.html
Reported-by: Yuyi Wang <[email protected]>
Signed-off-by: Jeremy Drake <[email protected]>
---
 winsup/cygwin/dll_init.cc   | 2 +-
 winsup/cygwin/release/3.6.2 | 3 +++
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/winsup/cygwin/dll_init.cc b/winsup/cygwin/dll_init.cc
index b8f38b56de..e5953ca9f6 100644
--- a/winsup/cygwin/dll_init.cc
+++ b/winsup/cygwin/dll_init.cc
@@ -633,7 +633,7 @@ dll_list::track_self ()
 static PVOID
 reserve_at (PCWCHAR name, PVOID here, PVOID dll_base, DWORD dll_size)
 {
-  DWORD size;
+  size_t size;
   MEMORY_BASIC_INFORMATION mb;

   if (!VirtualQuery (here, &mb, sizeof (mb)))
diff --git a/winsup/cygwin/release/3.6.2 b/winsup/cygwin/release/3.6.2
index 3b1944d99f..16a4fee156 100644
--- a/winsup/cygwin/release/3.6.2
+++ b/winsup/cygwin/release/3.6.2
@@ -28,3 +28,6 @@ Fixes:

 - Fix infinite exception loop on segmentation fault when strace-ing
   Addresses: https://cygwin.com/pipermail/cygwin/2025-May/258144.html
+
+- Fix size truncation in dll_init reserve_at function.
+  Addresses: https://cygwin.com/pipermail/cygwin/2025-May/258154.html
-- 
2.49.0.windows.1

Reply via email to