HomeFreeBSD

posix_spawn(3): handle potential signal issues with vfork

Description

posix_spawn(3): handle potential signal issues with vfork

Described in [1], signal handlers running in a vfork child have
opportunities to corrupt the parent's state. Address this by adding a new
rfork(2) flag, RFSPAWN, that has vfork(2) semantics but also resets signal
handlers in the child during creation.

x86 uses rfork_thread(3) instead of a direct rfork(2) because rfork with
RFMEM/RFSPAWN cannot work when the return address is stored on the stack --
further information about this problem is described under RFMEM in the
rfork(2) man page.

Addressing this has been identified as a prerequisite to using posix_spawn
in subprocess on FreeBSD [2].

[1] https://ewontfix.com/7/
[2] https://bugs.python.org/issue35823

Reviewed by: jilles, kib
Differential Revision: https://reviews.freebsd.org/D19058

Details

Committed
kevansSep 25 2019, 7:22 PM
Reviewer
jilles
Differential Revision
D19058: posix_spawn(3): handle potential signal issues with vfork
Parents
rS352711: rfork(2): add RFSPAWN flag
Branches
Unknown
Tags
Unknown