From nobody Tue Jul 21 02:58:49 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 4h42CG2RQvz6lP7V for ; Tue, 21 Jul 2026 02:58:50 +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 4h42CG0wrSz3rYb for ; Tue, 21 Jul 2026 02:58:50 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784602730; 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=rG3ocdQeziJ3y9jZu33nUvW72FoOFu0OTuxXyxyQ2bw=; b=y0B4FgHZ4c3ACa1NJ3TaYGUJ2fsDHOi1OoVpVzm/bjLuEgcLeZ11yVsualDw99v0+Nh7bu 1QKvwyKQJno+SgQIbwekKTaFpkI6pnbYB/gyvnDMtkum4UYM9JhZksGaw4caKFFP89BuNI wBYYJmKYm1koZ7VqGu5JP4dZ4kmnJi+wyMHunCeflDQX0ylNOvB5p3EUISPQUoz6M4yZv1 yENQSd2eTiXaOtD89/RpNV9xYWRDQp0fe0lkQNsI3JbIP+iJnMto11/zuxa0howLqlm+Bo cvrV9qrAGg9UyyIOa2ryjVpwqkxt8Mweg/BkXaCX/FB10MmEIalS6T6gm36F/A== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784602730; a=rsa-sha256; cv=none; b=EbYihyEzVDwKk08YYgy6boVnuGwF8ilkWFo1G3bmnTTicWkUs+fGIXCS5fjrrhTMrvunLC bQ6DQ8CsJVeqqbLWsMVuaN7Vz+treohyOp2F3P7/FEpXCHSFY23gWKXGk+JsSpwcx74mpK JXrKdsxdTawNeosOCE3gf3OSc/g8kfpFZXuiWhPxP0uFFrUXoDkNgaGhuVSCI4INrrBVOU u/okHfSfdjmnZ6UcaWTAaVh3bU0mQdrjv6FiGB/IJgcg6bvV0Yb0a1N1wEasOPGnr976SY KwEqekGLixD3N106PhOgXblHMEHj07O3hhO9/PysQ2EXdKd6BQq/HjW14PkYAQ== 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=1784602730; 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=rG3ocdQeziJ3y9jZu33nUvW72FoOFu0OTuxXyxyQ2bw=; b=iMXtsigt0/mp+4nIkmdMjo6XNLOneb0a+gQkEFjiGf7s0uzVTZ61IAWhAtjc2neaIDLb09 T1C8dpzAWCx4x1IFP33VkbCm7sXQRxcnt5piZxGfYGNOVdnyHB+dHKPcNZIqvvRjNt5Ns+ Ife0OL+E/hJ+yrzXrWKAqDJ+ZqGSZ09PJY0jrWZPHBxvd9zFSAfqvEXSFokSpxYhhNG087 bP2yDqExPjsi0Iu/6m/KiCK9A7Wv85d5Z0iqXPlT70MlmEzpy5g5eNhnwnnEZFYsupyGja JXwavbelUH2+4kH8xwjNJ0fL8+/78UctiaW/1nLMtnJT91kPMkpi8V2ttJTmTw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h42CF6hWdzVLC for ; Tue, 21 Jul 2026 02:58:49 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 24c6d by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 21 Jul 2026 02:58:49 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: eca7b25c101a - main - kern/sys_ptrace: do not skip P2_PTRACEREQ wait for PT_CLEARSTEP/PT_GET_CHILDREN 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/main X-Git-Reftype: branch X-Git-Commit: eca7b25c101a240472c4c274e725bc294284c827 Auto-Submitted: auto-generated Date: Tue, 21 Jul 2026 02:58:49 +0000 Message-Id: <6a5ee069.24c6d.55bce11@gitrepo.freebsd.org> The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=eca7b25c101a240472c4c274e725bc294284c827 commit eca7b25c101a240472c4c274e725bc294284c827 Author: Konstantin Belousov AuthorDate: 2026-07-20 22:09:59 +0000 Commit: Konstantin Belousov CommitDate: 2026-07-21 02:58:30 +0000 kern/sys_ptrace: do not skip P2_PTRACEREQ wait for PT_CLEARSTEP/PT_GET_CHILDREN Reported and reviewed by: markj Fixes: d3b7bbee9275 ("ptrace(2): add PT_GET_CHILDREN") Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58364 --- sys/kern/sys_process.c | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/sys/kern/sys_process.c b/sys/kern/sys_process.c index fc81ac4ca6c8..73e6b64e900b 100644 --- a/sys/kern/sys_process.c +++ b/sys/kern/sys_process.c @@ -1075,7 +1075,7 @@ kern_ptrace(struct thread *td, int req, pid_t pid, void *addr, int data) #ifdef COMPAT_FREEBSD32 int wrap32 = 0, safe = 0; #endif - bool proctree_locked, p2_req_set; + bool need_can_ptrace, proctree_locked, p2_req_set; curp = td->td_proc; proctree_locked = false; @@ -1162,6 +1162,7 @@ kern_ptrace(struct thread *td, int req, pid_t pid, void *addr, int data) /* * Permissions check */ + need_can_ptrace = true; switch (req) { case PT_TRACE_ME: /* @@ -1204,26 +1205,24 @@ kern_ptrace(struct thread *td, int req, pid_t pid, void *addr, int data) /* OK */ break; - case PT_CLEARSTEP: - /* Allow thread to clear single step for itself */ - if (td->td_tid == tid) - break; - goto default_check; - - case PT_GET_CHILDREN: - if (p == curp) - break; - goto default_check; - -default_check: default: + /* + * Allow thread to clear single step for itself. + * PT_GET_CHILDREN on itself does not need P_TRACED. + */ + if ((req == PT_CLEARSTEP && td->td_tid == tid) || + (req == PT_GET_CHILDREN && p == curp)) + need_can_ptrace = false; + /* * Check for ptrace eligibility before waiting for * holds to drain. */ - error = proc_can_ptrace(td, p); - if (error != 0) - goto fail; + if (need_can_ptrace) { + error = proc_can_ptrace(td, p); + if (error != 0) + goto fail; + } /* * Block parallel ptrace requests. Most important, do @@ -1241,7 +1240,7 @@ default_check: } if (error == 0 && td2->td_proc != p) error = ESRCH; - if (error == 0) + if (error == 0 && need_can_ptrace) error = proc_can_ptrace(td, p); if (error != 0) goto fail;