Re: notification-fd inadvertently closed by selfpipe_finish on FreeBSD?
"Laurent Bercot" <[email protected]> Sun, 18 Aug 2024 01:54:14 +0000
| Newsgroups | gmane.comp.sysutils.supervision.general |
|---|---|
| Message-ID | <[email protected]> |
>Is this a bug, or am I holding it wrong? It is a bug indeed! Thanks for the report and the detailed analysis. I'll fix it asap. >So maybe skalibs' cspawn... >...calls cspawn_fork() on FreeBSD if CSPAWN_FLAGS_SETSID is set. >...calls cspawn_pspawn() on macOS under the same conditions. > >There is no call to selfpipe_finish() in cspawn_pspawn. Yes. selfpipe_finish() must not be called in cspawn_pspawn() since only the parent process is running; the child process is only controlled by the posix_spawn attributes. With cspawn_fork(), selfpipe_finish() runs in the child. >(I guess because of posix_spawnattr_setsigmask?) The signal mask must be restored before the exec in both cases. It's the sigmask attribute for posix_spawn(), and selfpipe_finish() for fork(). But all that is only where the problem manifests. The real issue happens much earlier: when notification-fd is read and accepted without vetting that it's not clobbering the selfpipe. This is what I'll fix. -- Laurent