This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] [BZ #18433] Check file access/existence before forking.
- From: Alexander Monakov <amonakov at ispras dot ru>
- To: Szabolcs Nagy <szabolcs dot nagy at arm dot com>
- Cc: Carlos O'Donell <carlos at redhat dot com>, navid Rahimi <rahimi dot nv at gmail dot com>, Phil Blundell <pb at pbcl dot net>, "libc-alpha at sourceware dot org" <libc-alpha at sourceware dot org>
- Date: Fri, 18 Sep 2015 18:19:33 +0300 (MSK)
- Subject: Re: [PATCH] [BZ #18433] Check file access/existence before forking.
- Authentication-results: sourceware.org; auth=none
- References: <55F19819 dot 3010601 at gmail dot com> <55F19B66 dot 9050001 at arm dot com> <55F19C50 dot 3010502 at gmail dot com> <1441909606 dot 2948 dot 25 dot camel at pbcl dot net> <CAOUBrm2Kjbk3q+QJACYG24=p1dz60JXimxYG3oRRz2ehpocwkQ at mail dot gmail dot com> <55F299F4 dot 6030907 at arm dot com> <55FC235E dot 6030608 at redhat dot com> <55FC27CB dot 6070602 at arm dot com>
On Fri, 18 Sep 2015, Szabolcs Nagy wrote:
> On 18/09/15 15:44, Carlos O'Donell wrote:
> > Note that it is possible to use vfork in certain conditions,
> > and we do in glibc. So one should not entirely dismiss vfork,
> > but that's slightly off topic.
>
> are you sure?
>
> i think all use of vfork is invalid c: the compiler can
> spill registers on the stack then in the child clobber
> them, then after vfork returns in the parent the
> clobbered registers are restored breaking the expectations
> of the compiler. (this can break independently of how
> the c code around vfork looks like).
The same argument applies to setjmp, and the solution in GCC is the
same for both: GCC internally recognizes vfork, setjmp, and a few other
functions as functions that "return twice".
(after all, if it was broken like you describe, one would expect to witness
such breakage in practice, for instance with GNU Make prior to 4.0)
Alexander