Re: retry shm attach for windows (WAS: Re: [HACKERS] OK, so culicidaeis *still* broken) - Mailing list pgsql-hackers

From Amit Kapila
Subject Re: retry shm attach for windows (WAS: Re: [HACKERS] OK, so culicidaeis *still* broken)
Date
Msg-id CAA4eK1+0YmyN-VMgEFMnTY-SUcojfA_50EU4iuB4ABJKMjs-CQ@mail.gmail.com
Whole thread Raw
In response to Re: retry shm attach for windows (WAS: Re: [HACKERS] OK, so culicidae is *still* broken)  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: retry shm attach for windows (WAS: Re: [HACKERS] OK, so culicidae is *still* broken)  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-hackers
On Mon, Jun 5, 2017 at 4:00 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
> Amit Kapila <amit.kapila16@gmail.com> writes:
>> Okay, I have added the comment to explain the same.  I have also
>> modified the patch to adjust the looping as per your suggestion.
>
> I took a quick look at this, and it seems rather beside the point.
> You can't just loop inside an already-forked process and expect
> that address space that was previously unavailable will suddenly
> become available, when the problem is that the executable itself
> (or some shared library) is mapped into the space you want.
>

What I understood from the randomization shm allocation behavior due
to ASLR is that when we try to allocate memory (say using
VirtualAllocEx as in our case) at a pre-defined address, it will
instead allocate it at a different address which can lead to a
collision.  So, it seems to me the problem to solve here is not to
attempt to allocate the address space which is allocated to another
library,  rather negate the impact of randomized address allocation
behavior.  So I thought retrying to allocate space at predefined
address is sufficient.

> What we have to do in order to retry is to fork an entire new
> process, whose address space will hopefully get laid out differently.
>
> While it's possible we could do that in a platform-independent
> way, it would be pretty invasive and I don't see the value.
> The implementation I'd had in mind originally was to put a loop
> inside postmaster.c's internal_forkexec (win32 version), such
> that if pgwin32_ReserveSharedMemoryRegion failed, it would
> terminate/close up the subprocess as it already does, but then
> go back around and do another CreateProcess.  Perhaps it's as
> simple as the attached, but I'm not in a position to test it.
>

I think the same problem can happen during reattach as well.
Basically, MapViewOfFileEx can fail to load image at predefined
address (
UsedShmemSegAddr).

-- 
With Regards,
Amit Kapila.
EnterpriseDB: http://www.enterprisedb.com



pgsql-hackers by date:

Previous
From: atorikoshi
Date:
Subject: [HACKERS] Fix a typo in README.dependencies
Next
From: Tom Lane
Date:
Subject: Re: retry shm attach for windows (WAS: Re: [HACKERS] OK, so culicidae is *still* broken)