From nobody Sun Jun 21 11:48:06 2026 X-Original-To: dev-commits-src-main@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 4gjqMq27Pkz6jZ9w for ; Sun, 21 Jun 2026 11:48:07 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4gjqMp3470z3WLY for ; Sun, 21 Jun 2026 11:48:06 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1782042486; 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=/SLUDeCRMdA6h2vLMIqTgqgHP05yCxmX9S8EijBdvlc=; b=MlyxoCwTO90mh52x72lSIY0I/ooBGxuqquSuz9rvbmPbvXvC26p1TL8EwxgDIawekkf4i1 Uy/qdjdnwyfHi3l500AjhXa32oYA4wifXbziMWVREGBkl9Ew9wL9mNdUE1YJQms506atqj N/Lo5JUJQNhpPh+gQDA4TXmJz12lscyN2jvCm9UAqBHWfzXEmPrL+zJBJbgsN7sUFEeOlk a5lL61GQfDqGnLgqsmdKZp6OB/swGa0PhVi63gVNiDFKNyM77yKqHTyVZPmomId0vH63VP cR3aYSX8aYXGIH0P72cVlrS76g8pMipoOHqfmZ+Hq3s3tQKiqGSKHCxv0uXIaA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1782042486; a=rsa-sha256; cv=none; b=CBY9yjiLokaHCt62YTKYxo/ggwpYdkvn4Emo2Cu8r1KDjE+K7j9OaV/AJ4KlOFfqJpUIXH 3FrcfydSivGt8CZXqrbdsXouMa/abDzprzOVvWFOarCi4WAnxTWS9e/s+m9Zec5AMbfFIp l4hTriOIkp/fdfFTXKNn1n8oYjsh0OuEilRO6bajTIHDUJOPEeKq4C3yOp2DrRN+t5hiFv 1UDuiEKEDP3+zg6Q14dZixO/MFVdpcqEg5YKnX3dQD2dAzj1EsuGB76C35NAX7qpFO3UZK FeXGgQOhgnouCixlURxAQm7bIke54XMdW7xWKq2J1aDp6CRJNHUC/VhqLgsNAg== 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=1782042486; 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=/SLUDeCRMdA6h2vLMIqTgqgHP05yCxmX9S8EijBdvlc=; b=MJANqhweO+XIEA5cPlqvzmfxtqQWod+DjxbM28fp5/HCJau0FlavEzIV2Ao+R7tTbpFzH0 9O2Yb3Fy+TikwTqwzaFNXJs0Kpafbq2UVsbElsPPQNNIPQ0GS0mAkljy01KStUhneC8+Wz XMThkHudKYhu3EkZi2MDw/7AD+GVeAQ+miVbFv0mode39bKBTbNhGTrsx46zDGBB8bAoXp XCsaFbOKA7q2e6C66IZSXVo6o7I65LbO49BgyqGiK2+wnzoUY+Vn9C65XEfHdMVN+g27/j KgczNEf8qd1rNRhfIXQMaa3nkXH6WKxY/lKeVpZaMgI6Nd1bBPdQsoAJG/7f1Q== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4gjqMp1pCdz1FJN for ; Sun, 21 Jun 2026 11:48:06 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 2623f by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sun, 21 Jun 2026 11:48:06 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: 8b5abd9027b8 - main - kern_proc.c: disallow execve around sysctl kern.proc.kstacks List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@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/main X-Git-Reftype: branch X-Git-Commit: 8b5abd9027b8b1f6290c756730ee3adebed007f4 Auto-Submitted: auto-generated Date: Sun, 21 Jun 2026 11:48:06 +0000 Message-Id: <6a37cf76.2623f.37b2cbf4@gitrepo.freebsd.org> The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=8b5abd9027b8b1f6290c756730ee3adebed007f4 commit 8b5abd9027b8b1f6290c756730ee3adebed007f4 Author: Konstantin Belousov AuthorDate: 2026-06-15 17:57:47 +0000 Commit: Konstantin Belousov CommitDate: 2026-06-21 11:46:53 +0000 kern_proc.c: disallow execve around sysctl kern.proc.kstacks Reviewed by: markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: htts://reviews.freebsd.org/D57497 --- sys/kern/kern_proc.c | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/sys/kern/kern_proc.c b/sys/kern/kern_proc.c index 17b4effde030..f69a65f9d5a1 100644 --- a/sys/kern/kern_proc.c +++ b/sys/kern/kern_proc.c @@ -43,6 +43,7 @@ #include #include #include +#include #include #include #include @@ -2859,7 +2860,7 @@ sysctl_kern_proc_kstack(SYSCTL_HANDLER_ARGS) struct kinfo_kstack *kkstp; int error, i, *name, numthreads; lwpid_t *lwpidarray; - struct thread *td; + struct thread *td, *ctd; struct stack *st; struct sbuf sb; struct proc *p; @@ -2870,7 +2871,8 @@ sysctl_kern_proc_kstack(SYSCTL_HANDLER_ARGS) return (EINVAL); name = (int *)arg1; - error = pget((pid_t)name[0], PGET_NOTINEXEC | PGET_WANTREAD, &p); + ctd = curthread; + error = pget((pid_t)name[0], PGET_WANTREAD, &p); if (error != 0) return (error); @@ -2879,6 +2881,14 @@ sysctl_kern_proc_kstack(SYSCTL_HANDLER_ARGS) lwpidarray = NULL; PROC_LOCK(p); + execve_block_wait(ctd, p); + error = p_candebug(ctd, p); + if (error != 0) { + execve_unblock(ctd, p); + _PRELE(p); + PROC_UNLOCK(p); + return (error); + } do { if (lwpidarray != NULL) { free(lwpidarray, M_TEMP); @@ -2891,15 +2901,6 @@ sysctl_kern_proc_kstack(SYSCTL_HANDLER_ARGS) PROC_LOCK(p); } while (numthreads < p->p_numthreads); - /* - * XXXRW: During the below loop, execve(2) and countless other sorts - * of changes could have taken place. Should we check to see if the - * vmspace has been replaced, or the like, in order to prevent - * giving a snapshot that spans, say, execve(2), with some threads - * before and some after? Among other things, the credentials could - * have changed, in which case the right to extract debug info might - * no longer be assured. - */ i = 0; FOREACH_THREAD_IN_PROC(p, td) { KASSERT(i < numthreads, @@ -2932,7 +2933,10 @@ sysctl_kern_proc_kstack(SYSCTL_HANDLER_ARGS) if (error) break; } - PRELE(p); + PROC_LOCK(p); + execve_unblock(ctd, p); + _PRELE(p); + PROC_UNLOCK(p); if (lwpidarray != NULL) free(lwpidarray, M_TEMP); stack_destroy(st);