This is the mail archive of the
cygwin
mailing list for the Cygwin project.
Re: fixup_mmaps_after_fork failure with cygwin-3.0.0
On 2/17/2019 4:13 AM, Corinna Vinschen wrote:
> On Feb 17 10:08, Corinna Vinschen wrote:
>> On Feb 17 00:11, Ken Brown wrote:
>>> I'm getting a lot of errors like this when building emacs from its git repo:
>>>
>>> EMACSLOADPATH= '../src/emacs.exe' -batch --no-site-file --no-site-lisp --eval
>>> '(setq load-prefer-newer t)' -f batch-byte-compile ../../master/lisp/finder.el
>>> 1 [main] emacs 26848 fixup_mmaps_after_fork: VirtualProtectEx failed for
>>> MAP_PRIVATE address 0x6FFFFCD0000, Win32 error 5
>>> 190 [main] emacs 26848 C:\Users\kbrown\src\emacs\x86_64\src\emacs.exe: ***
>>> fatal error in forked process - recreate_mmaps_after_fork_failed
>>> 619 [main] emacs 26848 cygwin_exception::open_stackdumpfile: Dumping stack
>>> trace to emacs.exe.stackdump
>>> 1 [main] emacs 27052 fork: child -1 - forked process 26848 died
>>> unexpectedly, retry 0, exit code 0x100, errno 11
>>
>> Weird. I built at least gawk and openssh with 3.0 already and I
>> didn't notice this problem.
>>
>>> A bisection points to the following as the first bad commit:
>>>
>>> commit 69cc7a068656b5c6ef07ca079a213f801e02e650
>>> Author: Corinna Vinschen <corinna@vinschen.de>
>>> Date: Sun Jan 27 13:15:15 2019 +0100
>>>
>>> Cygwin: fork: restrict parent handle perms and drop handle after use
>>>
>>>
>>> I'll try to do some debugging and/or provide further information tomorrow, but I
>>> thought I'd start with this preliminary report.
>>
>> That would be nice. It's not clear to me which permission is missing.
>> The first part of the patch has been reverted in 3.0.0, so
>> child_info_spawn::get_parent_handle opens the parent with
>> PROCESS_VM_READ again. The second patch has been reworked as well,m
>> the current perms are
>>
>> PROCESS_QUERY_LIMITED_INFORMATION | PROCESS_VM_READ | SYNCHRONIZE
>>
>> If I may place a bet, please try to replace
>> PROCESS_QUERY_LIMITED_INFORMATION with PROCESS_QUERY_INFORMATION
That didn't change anything. Just to make sure I understood correctly, here's
what I tried:
--- a/winsup/cygwin/sigproc.cc
+++ b/winsup/cygwin/sigproc.cc
@@ -814,7 +814,7 @@ child_info::child_info (unsigned in_cb, child_info_types chtype,
allow the child to copy cygheap etc. from the parent to itself. If
we're forking, we also need handle duplicate access. */
parent = NULL;
- DWORD perms = PROCESS_QUERY_LIMITED_INFORMATION | PROCESS_VM_READ
+ DWORD perms = PROCESS_QUERY_INFORMATION | PROCESS_VM_READ
| SYNCHRONIZE;
if (type == _CH_FORK)
{
> On second thought, an even better candidate may be PROCESS_VM_OPERATION.
That's even worse. With that change, simply invoking 'make' leads to the same
error.
>> What OS is that? W7?
W10 1803 with WSL installed.
I'll keep looking at this, but let me know if you have further ideas. It would
be nice if I could come up with a simple test case, but at the moment all I have
is, "clone the emacs git repo and try to build".
Ken