From nobody Sun Aug 16 02:46:35 2026 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 4hN0j81RbFz6pH5w for ; Sun, 16 Aug 2026 02:46:36 +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 "YR2" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hN0j760C8z3dpx for ; Sun, 16 Aug 2026 02:46:35 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1786848395; 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=BA2iLhqGGKPLNCC6A4tEU7/ifLX1fyzs8x2TqfvEUNc=; b=lXVyyuMg9f6yYz8wy9/f1cVnQ35L9DI7IP/h24yRf5aq9dR1B4GI+WI6vzfJoHvfCzpG1D hzGsUdVTtGzIJYYwb6kiNZlO8HjhdNntWRAO37wSocNVVLhs0D/Z0fV0VjSl3XXB4treBP mlV45x0oggC7lGiaWWaQ2F09/TeWl30R/7RblTFvrzgCZFYb849spdfIkxZ3oGDcgpqBNV ldvzY3qFdHmquNeqdsobJ8F+bcmqT77MmeKM3YU8c1xPBKQPLH8NerJeiHxRa2p2JoiaJu Kpo9gcHTjMyvOV7a48+8E6HxemI+gmV+d+j5yk+LSqMGH6Hi37AIQiyZCJTKaQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1786848395; a=rsa-sha256; cv=none; b=wanAeyyle7p6nlPJfKAEEo/1bnek0JWZEYCSNN7QXB6DJuZjSqJ4tc6iUBUJv29UW92IQV zcL5dXhPgGEQsHrgp8IyP/WFN760lwLsg+dC6YCB2uIoO246mbMktRZLkpdAcSthuxCg/M x5xHN0aZ4LE9VXpc/0/5z8uZtkOFl9hl3nCTwcDADiTNrc4xGFqwIxlcGmDWo02DyofB0X IzpBdhoG8wbZK8eM6uj8Gv8xs0vJqX80C54qT1CY1Ge1akqfTXmAdxV+5okw+Gc2y00aSq B2m+PT2y5XBIr6adk6eHGeyK0P5rj21gi5pvCJnCUjk8RRjv5QhYXaEIr87dQw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1786848395; 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=BA2iLhqGGKPLNCC6A4tEU7/ifLX1fyzs8x2TqfvEUNc=; b=cy/YYwxM1M2TP1mOH9vTdCfxfgXGLgtF0hhRWaRSVe88RlX5+b10plJ0lVcNnn5L8vXSYE RB9Yk40mZoIcLWC8quhZngV4up4CRAh3uTwmj3mtSA7eA7OqMJqiZGM7ce+qidCD6P1kB4 Popweg2g4HvyoMuDwE9W2+6LofkwLL5vvHOxsfW8arX9W9IAvgQrR9JsC7sg/juuPSjU9e LWWhIAD5vxr9hcpx3i5fsPUr3UCMtPqanyhzBQ8zVCU+bQVeUe01SmaDoihcaTXeVG4BCD QXmnYHz/Mz1h2iBCHlzxgQKJn1HBeFQT0xSQ/jZ2e/2qoHVdRbRuTmQrn6+MRw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hN0j74jf8z173N for ; Sun, 16 Aug 2026 02:46:35 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 436dc by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sun, 16 Aug 2026 02:46:35 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Konstantin Belousov Subject: git: 886aadb63941 - stable/15 - procdesc: make PD_DAEMON per-file 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: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kib X-Git-Repository: src X-Git-Refname: refs/heads/stable/15 X-Git-Reftype: branch X-Git-Commit: 886aadb639415308a696a49a35066e536cdc1caf Auto-Submitted: auto-generated Date: Sun, 16 Aug 2026 02:46:35 +0000 Message-Id: <6a81248b.436dc.3f89b011@gitrepo.freebsd.org> The branch stable/15 has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=886aadb639415308a696a49a35066e536cdc1caf commit 886aadb639415308a696a49a35066e536cdc1caf Author: Konstantin Belousov AuthorDate: 2026-05-25 17:48:03 +0000 Commit: Konstantin Belousov CommitDate: 2026-08-16 02:41:21 +0000 procdesc: make PD_DAEMON per-file (cherry picked from commit c0e1201aaba8860bdcfd754e35024a85ceb1580a) --- sys/kern/sys_procdesc.c | 26 +++++++++++++++++--------- sys/sys/file.h | 1 + sys/sys/procdesc.h | 7 ++++++- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/sys/kern/sys_procdesc.c b/sys/kern/sys_procdesc.c index a3e234be7e39..c4df1f30989b 100644 --- a/sys/kern/sys_procdesc.c +++ b/sys/kern/sys_procdesc.c @@ -209,8 +209,6 @@ procdesc_alloc(int flags) pd = malloc(sizeof(*pd), M_PROCDESC, M_WAITOK | M_ZERO); pd->pd_flags = 0; pd->pd_pid = -1; - if ((flags & PD_DAEMON) != 0) - pd->pd_flags |= PDF_DAEMON; PROCDESC_LOCK_INIT(pd); knlist_init_mtx(&pd->pd_selinfo.si_note, &pd->pd_lock); @@ -260,7 +258,12 @@ int procdesc_falloc(struct thread *td, struct file **resultfp, int *resultfd, int flags, struct filecaps *fcaps) { - return (falloc_caps(td, resultfp, resultfd, pdtofdflags(flags), fcaps)); + int error; + + error = falloc_caps(td, resultfp, resultfd, pdtofdflags(flags), fcaps); + if (error == 0 && (flags & PD_DAEMON) != 0) + (*resultfp)->f_pdflags |= F_PD_NOKILL; + return (error); } /* @@ -369,6 +372,15 @@ procdesc_reap(struct proc *p) procdesc_free(pd); } +static void +procdesc_close_tail(struct file *fp, struct proc *p) +{ + if ((fp->f_pdflags & F_PD_NOKILL) == 0) + kern_psignal(p, SIGKILL); + PROC_UNLOCK(p); + sx_xunlock(&proctree_lock); +} + /* * procdesc_close() - last close on a process descriptor. If the process is * still running, terminate with SIGKILL (unless PDF_DAEMON is set) and let @@ -436,13 +448,9 @@ procdesc_close(struct file *fp, struct thread *td) p->p_oppid = p->p_reaper->p_pid; proc_add_orphan(p, p->p_reaper); } - if ((pd->pd_flags & PDF_DAEMON) == 0) - kern_psignal(p, SIGKILL); - PROC_UNLOCK(p); - sx_xunlock(&proctree_lock); + procdesc_close_tail(fp, p); } else { - PROC_UNLOCK(p); - sx_xunlock(&proctree_lock); + procdesc_close_tail(fp, p); } } diff --git a/sys/sys/file.h b/sys/sys/file.h index 87cfdb8eed20..bc529df82048 100644 --- a/sys/sys/file.h +++ b/sys/sys/file.h @@ -213,6 +213,7 @@ struct file { union { int16_t f_seqcount[2]; /* (a) Count of seq. reads and writes. */ int f_pipegen; + int f_pdflags; /* Per-file flags for procdesc. */ }; off_t f_nextoff[2]; /* next expected read/write offset. */ union { diff --git a/sys/sys/procdesc.h b/sys/sys/procdesc.h index 08b563828b95..5fbd43f1ac84 100644 --- a/sys/sys/procdesc.h +++ b/sys/sys/procdesc.h @@ -89,7 +89,12 @@ struct procdesc { * Flags for the pd_flags field. */ #define PDF_EXITED 0x00000004 /* Process exited. */ -#define PDF_DAEMON 0x00000008 /* Don't exit when procdesc closes. */ + +/* + * Flags for file f_pdflags. + */ +#define F_PD_NOKILL 0x00000001 /* Opened with PD_DAEMON. Don't send + SIGKILL when file closes. */ /* * In-kernel interfaces to process descriptors.