From nobody Sat Feb 28 01:33:17 2026 X-Original-To: dev-commits-src-branches@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 4fN74Y3KfNz6TnnX for ; Sat, 28 Feb 2026 01:33:17 +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 "R12" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4fN74Y1qxNz47hR for ; Sat, 28 Feb 2026 01:33:17 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1772242397; 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=5mMGG2aHOwWlOPxNEvumDcoaC1ToRsG1Hg04JydVdC0=; b=qnSJBMIwqFOyXebWF0nGnPXfO/3zbSGNWaUhwOCfjPhv1fWzMzwQ35Aydd3ut9XZrSxdrc qJuiW7b8WpXhOZnCcQqV1wnxEiQ8J5B7iw4ht7MPjttN/2dNoaRM8/QqHUlCHuY1Xg+IxR SJ9opdf4ibPsgkffqCfqlDwPw5NjsAOp7ATWR07knHjvPKz3Su6vYALgfOyeBBWjrbhZQf E7jr9u4qxgiEJ7zKkRlbvcmCr9KBsYS94Z8ar/KeAU55Ik/z6KEXMC6lrumw/Afxh6MdvB MDp1IwWCGO1FpIgnkCab1kR7uo5WI8gIH4TFA48UZEmqQSpDkIuAVzTLyhSi7Q== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1772242397; a=rsa-sha256; cv=none; b=hW81LiqaeO5KY9waF1JveNXvpEyTpw1+HdqprUmFCRtnHVeFpqrJtkrhx2mWgN0Fd1bW3s 00Okd9OKvstHWmxZU0rYz18E5B1SR7AFpCflqGXcpmm3AQurSrg1eB6tY36rZmESXfwSJ9 koizSMES0N2s9YH2Y55ZeolOaLJOBnvNL665CoY7czmS0lFlrAz1cyB9obUfv3r3i9HY6q 3EDZL01cAUxLw6jKxra0EaQUphRpvUD+it+fTiwdR+L+MCBmJGf6v6f4dYs99CWxWPcF4a b+q5J+Ft59bButc6LS2WxKB19B5mm7VZU4vz/Gmo6JgYs5FoR+teb9wAmq9GNA== 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=1772242397; 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=5mMGG2aHOwWlOPxNEvumDcoaC1ToRsG1Hg04JydVdC0=; b=ovPHOAkMraps0DtBKqHCnTWylw/9jWI2OvrOgWG3rIo0WqT9Yq4mtUXIwrabRRihFw1VlO sEz19nnT4Nb2f6OKNASL50O3O2opdyPWF71mDwkPibMWeOEyzp3JE67IhkS2WaS4mOG0Gf 570zv0UoCALN0HA3MkdwnKW/SBNvCfdkOyUkbaX+Sxi7aX8gKaADiz5Pz1RPnx0GRWGt/F Liro75z4Z66v8+/+h6DD/NvrOTnKmQOb9k2rF5x/MrGsGBUZi6mvJUyWlRGVMQrQtK1Pm0 m15lIbu/I3NTARw7B2uhbnJhvzm3rHfT5/hCxy3KkUu0mJO85tSTkeA0NV5IoA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fN74Y1FJnzjQF for ; Sat, 28 Feb 2026 01:33:17 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1bea1 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sat, 28 Feb 2026 01:33:17 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Konstantin Belousov Subject: git: cf64824a3e95 - stable/15 - reap_kill_subtree_once(): reap_kill_proc_work() might drop proctree_lock List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@FreeBSD.org 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: cf64824a3e95777834233064dfbf6ed9f8a1c663 Auto-Submitted: auto-generated Date: Sat, 28 Feb 2026 01:33:17 +0000 Message-Id: <69a245dd.1bea1.c3430f5@gitrepo.freebsd.org> The branch stable/15 has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=cf64824a3e95777834233064dfbf6ed9f8a1c663 commit cf64824a3e95777834233064dfbf6ed9f8a1c663 Author: Konstantin Belousov AuthorDate: 2026-02-16 15:20:02 +0000 Commit: Konstantin Belousov CommitDate: 2026-02-28 01:32:24 +0000 reap_kill_subtree_once(): reap_kill_proc_work() might drop proctree_lock (cherry picked from commit 0e67c3f675eab3a9c00b76e3886ace7700ef1bd4) --- sys/kern/kern_procctl.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/sys/kern/kern_procctl.c b/sys/kern/kern_procctl.c index 04c47d086677..30ab37d56877 100644 --- a/sys/kern/kern_procctl.c +++ b/sys/kern/kern_procctl.c @@ -280,7 +280,7 @@ reap_kill_proc_locked(struct reap_kill_proc_work *w) } static void -reap_kill_proc(struct reap_kill_proc_work *w) +reap_kill_proc(struct reap_kill_proc_work *w, bool *proctree_dropped) { struct pgrp *pgrp; int xlocked; @@ -311,6 +311,7 @@ reap_kill_proc(struct reap_kill_proc_work *w) /* This is safe because pgrp zone is nofree. */ sx_xlock(&pgrp->pg_killsx); sx_xunlock(&pgrp->pg_killsx); + *proctree_dropped = true; if (xlocked) sx_xlock(&proctree_lock); else @@ -392,7 +393,7 @@ reap_kill_subtree_once(struct thread *td, struct proc *p, struct proc *reaper, struct reap_kill_tracker_head tracker; struct reap_kill_tracker *t; struct proc *p2; - bool res; + bool proctree_dropped, res; res = false; TAILQ_INIT(&tracker); @@ -400,6 +401,7 @@ reap_kill_subtree_once(struct thread *td, struct proc *p, struct proc *reaper, while ((t = TAILQ_FIRST(&tracker)) != NULL) { TAILQ_REMOVE(&tracker, t, link); +again: /* * Since reap_kill_proc() drops proctree_lock sx, it * is possible that the tracked reaper is no longer. @@ -435,6 +437,7 @@ reap_kill_subtree_once(struct thread *td, struct proc *p, struct proc *reaper, (P2_REAPKILLED | P2_WEXIT)) != 0) continue; + proctree_dropped = false; PROC_LOCK(p2); if ((p2->p_flag2 & P2_WEXIT) == 0) { _PHOLD(p2); @@ -446,11 +449,13 @@ reap_kill_subtree_once(struct thread *td, struct proc *p, struct proc *reaper, p2->p_flag2 |= P2_REAPKILLED; w->target = p2; - reap_kill_proc(w); + reap_kill_proc(w, &proctree_dropped); _PRELE(p2); } PROC_UNLOCK(p2); res = true; + if (proctree_dropped) + goto again; } reap_kill_sched_free(t); }