From nobody Fri Mar 3 05:17:23 2023 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4PSbnc0sg8z3whQy; Fri, 3 Mar 2023 05:17:24 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4PSbnc041jz3lPq; Fri, 3 Mar 2023 05:17:24 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1677820644; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=RbGWRUT/eAXf4ayaqwsyTvEuqUzYfPDuq2Yn7ys4y9c=; b=l/KfPGypzGT17oU+YylnmOSyqImpxiJrxi7dzxc1x/CKfaWRwarhMGnMBI3IaGLgkX8QKb Z8TqvrNQapfTl+jW/K6XqYA0oLpMKTJPXzF2dgsANyRvlplez1rM3FZVM3j1XJTuJG4Twn BX8X3mPrfnV0YhqWl0r5ivXhfD+1lXy3p1rFYYukFg1iIPtMuaKLrH1c07G8LQrQR9M/IP em6vHMIw2XdSZF1Jz94OiroFLACZbGSb5uPcTzPIOPcU+IdzkD7L3up3JOWmepewsPAXv2 TFZivGz7C7N34NdTAg2ULToMGD++v1/5KbtGK1GTVSAZfqew6h5ol00k0so9OA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1677820644; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=RbGWRUT/eAXf4ayaqwsyTvEuqUzYfPDuq2Yn7ys4y9c=; b=sk2dbwEqOaY/cP6/yWvs6bQ5+5O/EUsUxtYu0IYxf2j042djlVvnEiq4Jc2tmVQFZloQDD fMINzlfZAQszajKzkagjOT7xVDyK6Km5PDR5ZleuxQ0RcEeTGf8cI8oe3239FqYe0Jy3E0 PnrfmWHBLpemHe33YyThKLskgHQT50bmybxNpoC8q5DmaJomoc79vyiH7qCStsqd0OLbKf SUUckCdz/abbTtKCW78pzKCXtsjeniMpo23IZi1B/oPEdEKd7olCWejvDFWOR6JuLSamz4 VJ5ZFjuXVRdisWFoWiDjv67lUPpb/CmjhAMLTQBK+cMXPU0FcxBTBmeAQOlPrg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1677820644; a=rsa-sha256; cv=none; b=W/FqNRZ2jaGVaZnyhSiAZVc1Qs6RAf8SNf1Witdk/3H3aCqsTWVaYKiD8M8JIBxzmWr7S3 0qZtpFgP4yFFVmJzR8djFv4GXgay4Kgpn6gnwTxLpZRwaQS8kx6Ee4FTjZWikFE1ZEnWYi IOHjfsT3AN0pFAdw62pVFicSU8o/dMnMr/cmo1k7I4vhlrcBN7zxT8UZNCSv/Ff1hM7Cmv IEri8Kasu6aP/EeKNdrKUKXOD0OTmiv7sfSZbmVPMo6tO9OtB8WasEVZ5tUR97ZjwtNADi 1W7ie1SR6xHis6Ko+f5EzKiX6BACjjVbzFaX1cDYHLZPgN8vEov/kDlBs84kCg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4PSbnb5kJMzkrL; Fri, 3 Mar 2023 05:17:23 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 3235HNpr019607; Fri, 3 Mar 2023 05:17:23 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 3235HN2N019606; Fri, 3 Mar 2023 05:17:23 GMT (envelope-from git) Date: Fri, 3 Mar 2023 05:17:23 GMT Message-Id: <202303030517.3235HN2N019606@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Kyle Evans Subject: git: 75f61ca92098 - main - daemon: flatten and simplify fork() logic List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kevans X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 75f61ca92098941f73020f46674f0c40db7270fb Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by kevans: URL: https://cgit.FreeBSD.org/src/commit/?id=75f61ca92098941f73020f46674f0c40db7270fb commit 75f61ca92098941f73020f46674f0c40db7270fb Author: Ihor Antonov AuthorDate: 2023-03-03 05:17:02 +0000 Commit: Kyle Evans CommitDate: 2023-03-03 05:17:02 +0000 daemon: flatten and simplify fork() logic Reviewed by: kevans Pull Request: https://github.com/freebsd/freebsd-src/pull/672 --- usr.sbin/daemon/daemon.c | 53 ++++++++++++++++++++++++++---------------------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/usr.sbin/daemon/daemon.c b/usr.sbin/daemon/daemon.c index 16e22efed68e..964a77deb0f9 100644 --- a/usr.sbin/daemon/daemon.c +++ b/usr.sbin/daemon/daemon.c @@ -84,7 +84,7 @@ static void daemon_sleep(time_t, long); static volatile sig_atomic_t terminate = 0; static volatile sig_atomic_t child_gone = 0; -static volatile sig_atomic_t pid = -1; +static volatile sig_atomic_t pid = 0; static volatile sig_atomic_t do_log_reopen = 0; static const char shortopts[] = "+cfHSp:P:ru:o:s:l:t:m:R:T:h"; @@ -368,34 +368,27 @@ restart: */ child_gone = 0; pid = fork(); - if (pid == -1) { - warn("fork"); - goto exit; - } else if (pid > 0) { - /* - * Unblock SIGTERM after we know we have a valid - * child PID to signal. - */ - if (sigprocmask(SIG_UNBLOCK, &mask_term, NULL)) { - warn("sigprocmask"); - goto exit; - } - close(pfd[1]); - pfd[1] = -1; - } } - if (pid <= 0) { - /* Now that we are the child, write out the pid. */ + + /* fork failed, this can only happen when supervision is enabled */ + if (pid == -1) { + warn("fork"); + goto exit; + } + + + /* fork succeeded, this is child's branch or supervision is disabled */ + if (pid == 0) { pidfile_write(child_pidfh); if (user != NULL) { restrict_process(user); } /* - * When forking, the child gets the original sigmask, + * In supervision mode, the child gets the original sigmask, * and dup'd pipes. */ - if (pid == 0) { + if (supervision_enabled) { close(pfd[0]); if (sigprocmask(SIG_SETMASK, &mask_orig, NULL)) { err(1, "sigprogmask"); @@ -416,12 +409,24 @@ restart: } } execvp(argv[0], argv); - /* - * execvp() failed -- report the error. The child is - * now running, so the exit status doesn't matter. - */ + /* execvp() failed - report error and exit this process */ err(1, "%s", argv[0]); } + + /* + * else: pid > 0 + * fork succeeded, this is the parent branch, this can only happen when + * supervision is enabled + * + * Unblock SIGTERM after we know we have a valid child PID to signal. + */ + if (sigprocmask(SIG_UNBLOCK, &mask_term, NULL)) { + warn("sigprocmask"); + goto exit; + } + close(pfd[1]); + pfd[1] = -1; + setproctitle("%s[%d]", title, (int)pid); /* * As we have closed the write end of pipe for parent process,