On Wed, 2 Jul 2025, Corinna Vinschen wrote:

> On Jun 30 10:11, Jeremy Drake via Cygwin-patches wrote:
> > On Mon, 30 Jun 2025, Corinna Vinschen wrote:
> >
> > > On Jun 27 10:34, Jeremy Drake via Cygwin-patches wrote:
> > > > On Fri, 27 Jun 2025, Corinna Vinschen wrote:
> > > >
> > > > > On Jun 26 13:31, Jeremy Drake via Cygwin-patches wrote:
> > > > > > BTW, I noticed while editing mingw/Makefile.am, shouldn't cygload 
> > > > > > have
> > > > > > -Wl,--disable-high-entropy-va in LDFLAGS?
> > > > >
> > > > > Why?
> > > >
> > > > With high-entropy-va, it has been observed that the PEB, TEB and stack 
> > > > can
> > > > happen to overlap with the cygheap
> > > > https://cygwin.com/pipermail/cygwin/2024-May/256000.html
> > >
> > > Yeah, but HEVA simply breaks fork.  We don't have to test this, because
> > > it won't work and we don't do it.  You can set the PE flag, but than
> > > you're on your own.
> >
> > Outside of fork, is cygheap able to "relocate" in case the memory it would
> > like to occupy is already used?
>
> I don't think so, without checking and, well, fixing every pointer usage
> potentially pointing into the cygheap.  Even fhandlers have pointers to
> fhandlers...
>

So shouldn't any user of the cygwin dll then need
-Wl,--disable-high-entropy-va to avoid the chance that Windows places its
structures where cygheap wants to be?

#define CYGHEAP_STORAGE_LOW    0x800000000UL
#define CYGHEAP_STORAGE_HIGH   0xa00000000UL

  cygheap = (init_cygheap *) VirtualAlloc ((LPVOID) CYGHEAP_STORAGE_LOW,
                                           CYGHEAP_STORAGE_HIGH
                                           - CYGHEAP_STORAGE_LOW,
                                           MEM_RESERVE, PAGE_NOACCESS);


0:000> !gle
LastErrorValue: (Win32) 0x1e7 (487) - Attempt to access invalid address.
LastStatusValue: (NTSTATUS) 0xc0000018 - {Conflicting Address Range}  The
specified address range conflicts with the address space.

>From the linked email, the failing memory layout with high entropy va set
was:

        BaseAddress      EndAddress+1        RegionSize     Type
State                 Protect             Usage
--------------------------------------------------------------------------------------------------------------------------
+        5`e8181000        8`05a00000        2`1d87f000             MEM_FREE    
PAGE_NOACCESS                      Free
+        8`05a00000        8`05b57000        0`00157000 MEM_PRIVATE MEM_RESERVE 
                                   <unknown>
         8`05b57000        8`05b58000        0`00001000 MEM_PRIVATE MEM_COMMIT  
PAGE_READWRITE                     PEB        [4628]
         8`05b58000        8`05b5a000        0`00002000 MEM_PRIVATE MEM_COMMIT  
PAGE_READWRITE                     TEB        [~0; 4628.31ac]
         8`05b5a000        8`05b5c000        0`00002000 MEM_PRIVATE MEM_COMMIT  
PAGE_READWRITE                     TEB        [~1; 4628.4aac]
         8`05b5c000        8`05b5e000        0`00002000 MEM_PRIVATE MEM_COMMIT  
PAGE_READWRITE                     TEB        [~2; 4628.5840]
         8`05b5e000        8`05b60000        0`00002000 MEM_PRIVATE MEM_COMMIT  
PAGE_READWRITE                     TEB        [~3; 4628.6b9c]
         8`05b60000        8`05c00000        0`000a0000 MEM_PRIVATE MEM_RESERVE 
                                   <unknown>
+        8`05c00000        8`05df6000        0`001f6000 MEM_PRIVATE MEM_RESERVE 
                                   Stack      [~0; 4628.31ac]
         8`05df6000        8`05df9000        0`00003000 MEM_PRIVATE MEM_COMMIT  
PAGE_READWRITE | PAGE_GUARD        Stack      [~0; 4628.31ac]
         8`05df9000        8`05e00000        0`00007000 MEM_PRIVATE MEM_COMMIT  
PAGE_READWRITE                     Stack      [~0; 4628.31ac]
+        8`05e00000        8`05ffb000        0`001fb000 MEM_PRIVATE MEM_RESERVE 
                                   Stack      [~1; 4628.4aac]
         8`05ffb000        8`05ffe000        0`00003000 MEM_PRIVATE MEM_COMMIT  
PAGE_READWRITE | PAGE_GUARD        Stack      [~1; 4628.4aac]
         8`05ffe000        8`06000000        0`00002000 MEM_PRIVATE MEM_COMMIT  
PAGE_READWRITE                     Stack      [~1; 4628.4aac]
+        8`06000000        8`061fb000        0`001fb000 MEM_PRIVATE MEM_RESERVE 
                                   Stack      [~2; 4628.5840]
         8`061fb000        8`061fe000        0`00003000 MEM_PRIVATE MEM_COMMIT  
PAGE_READWRITE | PAGE_GUARD        Stack      [~2; 4628.5840]
         8`061fe000        8`06200000        0`00002000 MEM_PRIVATE MEM_COMMIT  
PAGE_READWRITE                     Stack      [~2; 4628.5840]
+        8`06200000        8`063fb000        0`001fb000 MEM_PRIVATE MEM_RESERVE 
                                   Stack      [~3; 4628.6b9c]
         8`063fb000        8`063fe000        0`00003000 MEM_PRIVATE MEM_COMMIT  
PAGE_READWRITE | PAGE_GUARD        Stack      [~3; 4628.6b9c]
         8`063fe000        8`06400000        0`00002000 MEM_PRIVATE MEM_COMMIT  
PAGE_READWRITE                     Stack      [~3; 4628.6b9c]
+        8`06400000      19e`64400000      196`5e000000             MEM_FREE    
PAGE_NOACCESS                      Free

Reply via email to