From nobody Sat Jun 13 01:03:58 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 4gcdSH0gmyz6hSnD for ; Sat, 13 Jun 2026 01:03:59 +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 "R13" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4gcdSG51Y1z3lsf for ; Sat, 13 Jun 2026 01:03:58 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1781312638; 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=sIQFozCXkWUbUrm0B237jdq58JRzq+TqXpuGOZhgXUk=; b=x4i4Y2DGeyy573vss4UwbTD5oTxjDBXPq4oiiITSN3aTKnnVXQ811aqM18UKsUGfoRleiM SZ1/VCHDv+SLuRKMOkaBCSNkVo0y/Zj0YYIUyC4KDnuq0/2mquOsQ1eiOlOZGsA7n8tqg8 TxLx0ZPxqkYbpWLGwNlTkOYxQvoxsOUOU2iLRcMdXLaLgK5r7uLFZa8uInkwLe2c7tVSLZ TD9GIkbwQhIQ7TI5L7tHuZApDCxkNGIBRp4eQsnDXTOsSRN0is5ATmc9HnUecKEYqTU7xe f9UHRuzhJB1d6xYwQ559OPlOdF7wFiFsG87sC05q5Q7nYPF9GB9AQc1lr3TiKw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1781312638; a=rsa-sha256; cv=none; b=Hqpuy81qw+pEFv8KJ1/B4mPe9YbizsCsrDAkdwCBR7eliUe73n0ISllllyNxY63jNa/beQ GQqnxpOqTq1rV1sMKjSXlBuUOfD0+2Wu83a6rx5+Pfczpa9kauEnYyeGkedWz0EKuPUGQN Gy1/LopOzwSOFSwVhRnYJckmyt1mZ4v/7vtkMpSlG444f5RRrvkHy8FZGzEXUFQqKoGr+t 04THKa6KQlOjecc4D76Uua6biuaIACkqwU+C83PVjrHNk1NKzZXxzYm0TlKmCG9y5aVpyL 42hWGcNKK8jnH0wraSdmd0t8o9BqX6TIvFYfLv64nAoYAPBRUBQTNpnlT5fLdw== 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=1781312638; 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=sIQFozCXkWUbUrm0B237jdq58JRzq+TqXpuGOZhgXUk=; b=LVrZ/cHYcJY1LIUDDu2A9Uwom8psb6Be0jyXqttIt9/kpSXa6wykIwNYU5Jzlhb2VY/Ev8 oHGOXjLbPk+yb84u3748Vmq7iMmI3gSPUHCEBjOBaPsb3u8As72h0HzDq+j9/ErpaSQwen sCsSbhxilau+cu/AVetY01bVsU2ddSQh1M8igUGb1Mb5e6yOF6/jg7NTDy6Y4vZLlLX2Ah ak0rtNZpnHGZ7Ka3oDHqX/pfHtF6EdfvNShsLSNKy1uMxA1o+DEIah4d7RLtY6eAElhMaK I5Wtp5+a/ASC4fbrAfVef72DHY4AEZcmj1MR7hYVjPnoIz/sKZkhf1JukAWbRQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4gcdSG3Ss3z11SK for ; Sat, 13 Jun 2026 01:03:58 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1eaf2 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sat, 13 Jun 2026 01:03:58 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Konstantin Belousov Subject: git: 53d691cacae6 - stable/15 - reap_kill_subtree_once: when proctree_lock is dropped, reaper might change 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: 53d691cacae602f96a80a656ec8f508b65ace81c Auto-Submitted: auto-generated Date: Sat, 13 Jun 2026 01:03:58 +0000 Message-Id: <6a2cac7e.1eaf2.2767a78c@gitrepo.freebsd.org> The branch stable/15 has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=53d691cacae602f96a80a656ec8f508b65ace81c commit 53d691cacae602f96a80a656ec8f508b65ace81c Author: Konstantin Belousov AuthorDate: 2026-06-05 23:57:16 +0000 Commit: Konstantin Belousov CommitDate: 2026-06-13 00:58:38 +0000 reap_kill_subtree_once: when proctree_lock is dropped, reaper might change (cherry picked from commit 44970244e6d872103f36eae34218b672b69579dd) --- sys/kern/kern_procctl.c | 43 +++++++++++++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 14 deletions(-) diff --git a/sys/kern/kern_procctl.c b/sys/kern/kern_procctl.c index 1ff1b15767b5..c8d14aa2f2f6 100644 --- a/sys/kern/kern_procctl.c +++ b/sys/kern/kern_procctl.c @@ -49,6 +49,7 @@ #include #include #include +#include static int protect_setchild(struct thread *td, struct proc *p, int flags) @@ -366,13 +367,7 @@ reap_kill_sched(struct reap_kill_tracker_head *tracker, struct proc *p2) { struct reap_kill_tracker *t; - PROC_LOCK(p2); - if ((p2->p_flag2 & P2_WEXIT) != 0) { - PROC_UNLOCK(p2); - return; - } - _PHOLD(p2); - PROC_UNLOCK(p2); + PROC_TREE_REF(p2); t = malloc(sizeof(struct reap_kill_tracker), M_TEMP, M_WAITOK); t->parent = p2; TAILQ_INSERT_TAIL(tracker, t, link); @@ -381,7 +376,7 @@ reap_kill_sched(struct reap_kill_tracker_head *tracker, struct proc *p2) static void reap_kill_sched_free(struct reap_kill_tracker *t) { - PRELE(t->parent); + PROC_TREE_UNREF(t->parent); free(t, M_TEMP); } @@ -416,16 +411,17 @@ reap_kill_children(struct thread *td, struct proc *reaper, } static bool -reap_kill_subtree_once(struct thread *td, struct proc *p, struct proc *reaper, +reap_kill_subtree_once(struct thread *td, struct proc *p, struct proc **reaperp, struct unrhdr *pids, struct reap_kill_proc_work *w) { struct reap_kill_tracker_head tracker; struct reap_kill_tracker *t; - struct proc *p2; + struct proc *p2, *reaper, *old_reaper; bool proctree_dropped, res; res = false; TAILQ_INIT(&tracker); + reaper = *reaperp; reap_kill_sched(&tracker, reaper); while ((t = TAILQ_FIRST(&tracker)) != NULL) { TAILQ_REMOVE(&tracker, t, link); @@ -483,8 +479,24 @@ again: } PROC_UNLOCK(p2); res = true; - if (proctree_dropped) + if (proctree_dropped) { + old_reaper = reaper; + reaper = get_reaper_or_p(p); + if (old_reaper != reaper) { + *reaperp = reaper; + PROC_TREE_REF(reaper); + PROC_TREE_UNREF(old_reaper); + reap_kill_sched(&tracker, reaper); + /* + * Already scheduled kill + * actions should be kept on + * the schedule, the processes + * are inherited by the new + * reaper. + */ + } goto again; + } } reap_kill_sched_free(t); } @@ -492,7 +504,7 @@ again: } static void -reap_kill_subtree(struct thread *td, struct proc *p, struct proc *reaper, +reap_kill_subtree(struct thread *td, struct proc *p, struct proc **reaperp, struct reap_kill_proc_work *w) { struct unrhdr pids; @@ -512,7 +524,7 @@ reap_kill_subtree(struct thread *td, struct proc *p, struct proc *reaper, goto out; } PROC_UNLOCK(td->td_proc); - while (reap_kill_subtree_once(td, p, reaper, &pids, w)) + while (reap_kill_subtree_once(td, p, reaperp, &pids, w)) ; ihandle = create_iter_unr(&pids); @@ -562,6 +574,7 @@ reap_kill(struct thread *td, struct proc *p, void *data) return (EINVAL); PROC_UNLOCK(p); reaper = get_reaper_or_p(p); + ksiginfo_init(&ksi); ksi.ksi_signo = rk->rk_sig; ksi.ksi_code = SI_USER; @@ -577,7 +590,9 @@ reap_kill(struct thread *td, struct proc *p, void *data) w.ksi = &ksi; w.rk = rk; w.error = &error; - reap_kill_subtree(td, p, reaper, &w); + PROC_TREE_REF(reaper); + reap_kill_subtree(td, p, &reaper, &w); + PROC_TREE_UNREF(reaper); crfree(w.cr); } PROC_LOCK(p);