https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=aa4c755ef45983ec5aace938a466eaf637680077

commit aa4c755ef45983ec5aace938a466eaf637680077
Author: Jeremy Drake <cyg...@jdrake.com>
Date:   Thu May 22 10:06:29 2025 -0700

    Cygwin: dll_init: use SIZE_T instead of DWORD for size
    
    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 VirtualAllloc.
    
    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 <strawberry_...@hotmail.com>
    Signed-off-by: Jeremy Drake <cyg...@jdrake.com>

Diff:
---
 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 b8f38b56d..1369165c9 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 3b1944d99..16a4fee15 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

Reply via email to