https://bugs.winehq.org/show_bug.cgi?id=49225
--- Comment #3 from Damjan Jovanovic damjan.jov@gmail.com --- It seems that create_view() is called after the memory is allocated by another function such as map_view(), in order to store the mapping. Thus if there is a range collision, it is a serious problem, because memory was allocated when it shouldn't have been.
Where is create_view called from and why?
create_view() map_view() allocate_dos_memory() map_image() virtual_map_section() virtual_alloc_thread_stack() virtual_alloc() allocate_dos_memory() virtual_alloc() NtAllocateVirtualMemory() virtual_alloc_first_teb() ... virtual_alloc_teb() ... ... virtual_create_builtin_view() ... virtual_alloc_thread_stack() RtlCreateUserStack() ...
That's a lot of searching. Let's assume the view got the right range previously, and only the call which results in the overlapping range is wrong. Where did that call come from?