From nobody Fri Aug 28 12:05:16 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 4hWcXF6SJLz6qHWb for ; Fri, 28 Aug 2026 12:05: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 "YR2" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hWcXF2pn7z3Bql for ; Fri, 28 Aug 2026 12:05:17 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1787918717; 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=YVlhhybrk+5oazgbPTifOh+Psq+dcJ0cGo40sFjNiSs=; b=HbKnYl8ff9FNA1qQ9z3zE1kXrL+8lpymrRAvVvUbyOZYyF3rn25sMHnMRqgq5DywRFKPkM l+WpXKM3MUq9GTtQhBUlfnX3dZHpJ01vsu01oAw9x0QMR0NjzsgqJ5hcXqWElE7KutwxSx g+YO2aGWgLkU1Besd1JyEl5P2UIcZA77U05OTt2Xd4iDyEE7FQFi8mgKtxTIGaiEB0Y2b5 kHsdKKdRjnKlBP1nS/wj89oBXjJNJirSd30vWf02ctfsth0l+XKmD8IC0hbtiMoZQHZsXZ ofkQVjsERhi0icx4oTf0mVR03AntGYxZm8zklCgyD7y7nfsUJu6xCTdh7nX8tQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1787918717; a=rsa-sha256; cv=none; b=P3HLyPlhuUZn9SEna6sljpEPkB1gBZygRrL4ixUsSoArRbhpwzUMzOlcfvit+xzFkd+S3m YRaLR+xVhOAdGZV+XOmIzT924CNYOvbpCh8PlYmraIaODFr5e28EK946sVUUQ9vcSXaqn3 QyEPaOAocUKFaBrPIQo7KOxjIJ4mGYYbiDJL254+nA2xnVM26fwavPwgwnVUyisn/YLv2l vJpfhDu68v4ZCB1tvpnw/a42fqP+XqQkIti5KjDNja6D4MessXlnqBfDJ4XKY21N0qRteN Jg8k8JwH97F4VYAhapr4Abuxpagb1208Zncd3Ldvi49r8Pa+P7xJPjrYZOHu6A== 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=1787918717; 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=YVlhhybrk+5oazgbPTifOh+Psq+dcJ0cGo40sFjNiSs=; b=J2r1pP81JxupNZIqNOhpFZsWoY4754/+aXa2JLf6dMIkJsLA93uPdSF5lXclA/NSpikCrQ /mHbfVWTq/r+FewAZnunNtu9lMvRjDRrlc2UfzPveTNLszMcjD2LgT5lpbfLPjcCCVY7mX pKAOKyiOyPYywKJm2hWflLvgvEKeS6pcABm4K8SzkWlsLMR25V9GoE4fqAuSBgBnP9xhEW 1qibSAHzhC40Zo6pniu2z5xt6X8l4TRcY/CLrR8dp0hBT1JRmHRYDAocR3QdHR6WyzTOkI QSuDZPniOKeEA2WqK8/ysyXI84tSjQ3mbi6qRhsJsdU+X2j5INk6Ptu76f5MTw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hWcXD6Z7cz18JL for ; Fri, 28 Aug 2026 12:05:16 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 26784 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 28 Aug 2026 12:05:16 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: 7006cb7bd22d - main - pdptrace(2): allow debugging in capability mode 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: 7006cb7bd22d07d2ce30b0fb7ebfe58771b2a32f Auto-Submitted: auto-generated Date: Fri, 28 Aug 2026 12:05:16 +0000 Message-Id: <6a91797c.26784.1c5f6cb9@gitrepo.freebsd.org> The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=7006cb7bd22d07d2ce30b0fb7ebfe58771b2a32f commit 7006cb7bd22d07d2ce30b0fb7ebfe58771b2a32f Author: Konstantin Belousov AuthorDate: 2026-07-07 23:46:56 +0000 Commit: Konstantin Belousov CommitDate: 2026-08-28 11:55:11 +0000 pdptrace(2): allow debugging in capability mode The pdopenpid(2) syscall is allowed in capability mode. Add the chicken switch security.bsd.ptrace_in_cap_mode, which disables it without reboot, if needed. The descriptor passed to pdptrace(2) must have the CAP_PTRACE capability enabled. This capability is not enabled by default by pdfork()/pdopenpid(), and the calls do not return a procdesc suitable for debugging. The opening code must prepare for debugging in advance by passing the PD_PTRACE_CAP flag to pdfork()/pdopenpid(). For ptrace(2), allow PT_CLEARSTEP and PT_GET_CHILDREN for the current thread and process in cap mode as well. Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58989 --- sys/compat/freebsd32/freebsd32_misc.c | 3 --- sys/kern/sys_process.c | 26 ++++++++++++++++++++++---- sys/kern/syscalls.master | 4 ++-- 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/sys/compat/freebsd32/freebsd32_misc.c b/sys/compat/freebsd32/freebsd32_misc.c index 4da3b4ee97c1..bb4548660278 100644 --- a/sys/compat/freebsd32/freebsd32_misc.c +++ b/sys/compat/freebsd32/freebsd32_misc.c @@ -1050,9 +1050,6 @@ freebsd32_ptrace_useraction(struct thread *td, int req, bool pd_mode, pid_t pid, void *addr; int data, error, i; - if (!allow_ptrace) - return (ENOSYS); - error = 0; addr = &r; data = udata; diff --git a/sys/kern/sys_process.c b/sys/kern/sys_process.c index 35aa376fb6f5..5c8f32773412 100644 --- a/sys/kern/sys_process.c +++ b/sys/kern/sys_process.c @@ -51,6 +51,7 @@ #include #include #include +#include #include #include #include @@ -708,6 +709,24 @@ ptrace_vm_entry(struct thread *td, struct proc *p, struct ptrace_vm_entry *pve) return (error); } +static int +ptrace_check_allowed(struct thread *td, int req, bool pd_mode, pid_t pid) +{ + if (!allow_ptrace) + return (ENOSYS); + if (!IN_CAPABILITY_MODE(td)) + return (0); + if (!allow_ptrace_in_cap_mode) + return (ECAPMODE); + if (pd_mode) + return (0); + if (req == PT_GET_CHILDREN && pid == td->td_proc->p_pid) + return (0); + if (req == PT_CLEARSTEP && pid == td->td_tid) + return (0); + return (ECAPMODE); +} + /* * Process debugging system call. */ @@ -748,12 +767,11 @@ ptrace_useraction(struct thread *td, int req, bool pd_mode, pid_t pid, int pfd, void *addr; int error, data; - if (!allow_ptrace) - return (ENOSYS); + error = ptrace_check_allowed(td, req, pd_mode, pid); + if (error != 0) + return (error); - error = 0; addr = &r; - switch (req) { case PT_GET_EVENT_MASK: case PT_LWPINFO: diff --git a/sys/kern/syscalls.master b/sys/kern/syscalls.master index 7050e564903e..656c73da348f 100644 --- a/sys/kern/syscalls.master +++ b/sys/kern/syscalls.master @@ -264,7 +264,7 @@ 25 AUE_GETEUID STD|CAPENABLED { uid_t geteuid(void); } -26 AUE_PTRACE STD { +26 AUE_PTRACE STD|CAPENABLED { int ptrace( int req, pid_t pid, @@ -3442,7 +3442,7 @@ int flags ); } -605 AUE_PDPTRACE STD { +605 AUE_PDPTRACE STD|CAPENABLED { int pdptrace( int req, int pfd,