Alexey Izbyshev <izbys...@ispras.ru> added the comment:

> Hi,

> As a disclaimer, I'm a FreeBSD developer interested in making sure we're 
> doing the right thing here. =)

> May I ask what the above assessment is based on, and specifically what we 
> need to address?

Hello, Kyle! That assessment is based on my quick and incorrect reading of 
posix_spawn source code. I didn't notice that "error" is visible in the parent 
due to address space sharing. Sorry for that, and thank you for the correction. 
A proper error notification is required for posix_spawn to be used in 
subprocess as a replacement for fork/exec, and FreeBSD does it right.

While we're here, would you be kind to answer several questions about 
posix_spawn on FreeBSD?

1) On Linux, without taking additional precautions, signals may be delivered to 
a child process created via vfork(). If a signal handler runs in such a child, 
it can leave traces of its work in the (shared) memory, potentially surprising 
the parent process. To avoid this, glibc[1] and musl[2] disable all signals 
(even signals used internally for thread cancellation) before creating a child, 
but FreeBSD calls vfork() right away. Is this not considered a problem, or is 
something hidden in vfork() implementation?

2) Another problem with vfork() is potential sharing of address space between 
processes with different privileges (see Rich Felker's post[3] about this and 
the previous problem). Is this a valid concern on FreeBSD?

3) Does FreeBSD kernel guarantee that when waitpid(WNOHANG) is called at [4], 
the child is ready for reaping? On Linux, it's not always the case[5].

[1] 
https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/spawni.c;h=353bcf5b333457d191320e358d35775a2e9b319b;hb=HEAD#l372
[2] 
http://git.musl-libc.org/cgit/musl/tree/src/process/posix_spawn.c?id=5ce3737931bb411a8d167356d4d0287b53b0cbdc#n171
[3] https://ewontfix.com/7
[4] 
https://svnweb.freebsd.org/base/head/lib/libc/gen/posix_spawn.c?view=markup#l229
[5] 
https://sourceware.org/git/?p=glibc.git;a=commit;h=aa95a2414e4f664ca740ad5f4a72d9145abbd426

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue35537>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to