Run non-daemons services in a different process group to avoid SIGHUP at boot
authorjca <jca@openbsd.org>
Fri, 15 Dec 2023 16:59:48 +0000 (16:59 +0000)
committerjca <jca@openbsd.org>
Fri, 15 Dec 2023 16:59:48 +0000 (16:59 +0000)
12 factors apps and similar don't daemonize and are thus vulnerable to
receiving a SIGHUP signal at the end of /etc/rc.  Shield them by running
them in a different process group.  Do this only for services that need
rc_bg=Yes, as suggested by ajacoutot@

There have been several reports about this issue in the past years, the
last one being from edd@ who successfully tested this fix.  Input from
several folks, ok sthen@ ajacoutot@

etc/rc.d/rc.subr

index 502a469..47b9acb 100644 (file)
@@ -1,4 +1,4 @@
-#      $OpenBSD: rc.subr,v 1.160 2022/10/19 21:04:45 ajacoutot Exp $
+#      $OpenBSD: rc.subr,v 1.161 2023/12/15 16:59:48 jca Exp $
 #
 # Copyright (c) 2010, 2011, 2014-2022 Antoine Jacoutot <ajacoutot@openbsd.org>
 # Copyright (c) 2010, 2011 Ingo Schwarze <schwarze@openbsd.org>
@@ -166,7 +166,15 @@ rc_exec() {
        [ "${daemon_rtable}" -eq "$(id -R)" ] ||
                _rcexec="route -T ${daemon_rtable} exec ${_rcexec}"
 
-       ${_rcexec} "${daemon_logger:+set -o pipefail; } \
+       local _set_monitor=":"
+       # Run non-daemons services in a different process group to avoid SIGHUP
+       # at boot.
+       if [ X"${rc_bg}" = X"YES" ]; then
+               _set_monitor="set -o monitor"
+       fi
+
+       ${_rcexec} "${_set_monitor}; \
+               ${daemon_logger:+set -o pipefail; } \
                ${daemon_execdir:+cd ${daemon_execdir} && } \
                $@ \
                ${daemon_logger:+ 2>&1 |