From nobody Mon Mar 31 02:46:05 2025 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 4ZQwVk1JY6z5sTW4; Mon, 31 Mar 2025 02:46:06 +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 "R10" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4ZQwVk004Vz47GH; Mon, 31 Mar 2025 02:46:06 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1743389166; 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=dwyQhwfw7NS5/eWiNNVtf+8u0eBvdeWdCLvgAQLjqD4=; b=gm+3L8CXrFhKAKBkbbQ2rSjQMXTvNcY9kIDwYs4ymcrYsW4otzk1dSj3sVH2RkFNeoBSQ6 l40WoMIm4sREmuYLeONX/qVB6k30oXdQWTkA9LyxVNNzODj7B5LTVszGXZsL+QhQ/wn3Da HQW32/zTR1g7hQ53gSdwNpeMr96tGCNSdQc3KIupiGLwVdtOgIzdOLlONqzKUfOYkuEUrz tUDyKmaTFHG4u+oZjvXR9OpBYdW3vh8rrigJ9JuQk8yfURyy89QdHvPPuo0e10+Y/G9aP1 tIhtxI8UP8chLGV8+gOD9J+i6uTtm3z9MsbWAy3JOso08q0faMCi6lhgvT1Rhw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1743389166; a=rsa-sha256; cv=none; b=ZjX2Z9jfeS0NpOiuty5V/NDD8MK+Y0CwXckM2pZv1rF6l7m/5m3jbN/J0RXhPzV7O3JmMl bs1n8usbJvYj1E5+nwcGRMCJnGrdM3veLECX4KX6+14d9JGNnDddGLEW1Ue25r/C5ASt9U UG5F5s1mGMD3r+D4jhj3MfxaOJMwczgBnsGbd9kLriWQjAGrlSYToEJL/CJ/YyLLjDUei+ iSbs2rKlukqLjXgmCeB3GPjKb/BzgcfAs/pXbQ7eSXo7s6cgfjfVabJhWASZhDw3ABrrlt tyiALHop4viNgPqwLeGGsIHMKeYlLunamlPi6OEHowl2NCoiEhHyP/DNUNfYZQ== 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=1743389166; 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=dwyQhwfw7NS5/eWiNNVtf+8u0eBvdeWdCLvgAQLjqD4=; b=jlWBFdKix5LTlg7As7oVlo3+34ity/kSTpC2tXDBb40Zbx2pd4cwAJiNZe2DbbUq/7kZS6 d4MCHCYl/UXa8pFdGphnk2/C8W0lwnqmGp0lUiiLnpufl4fGts7w3APsZ5a60oTP/+K+LI 8vTyrqJEX4PvbdjY6q+rFQ2EGCyWyp+0uhQZX1ZX1Ny/9MVN2oo34o3Irtf5NeuK613Yh5 VtkY5YmRQMoW+IACGsUfVgd+oclM/zichX33sWfmnuazbHQKfkgsP0jgAJFda6kRYFf6/L U5VFH0taRlv78CcISt8PARGPF0+lJTbpiLNMZ5JQHay0+Z8OOtisHcxZH8vG1A== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (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 did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4ZQwVj5vLhz9Sm; Mon, 31 Mar 2025 02:46:05 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 52V2k5S4066768; Mon, 31 Mar 2025 02:46:05 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 52V2k5ju066765; Mon, 31 Mar 2025 02:46:05 GMT (envelope-from git) Date: Mon, 31 Mar 2025 02:46:05 GMT Message-Id: <202503310246.52V2k5ju066765@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: fd5bc306ff3d - main - ptrace(2): expand ability to fetch syscall parameters 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 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: fd5bc306ff3d8f908f36703d6ab714322f9f3c75 Auto-Submitted: auto-generated The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=fd5bc306ff3d8f908f36703d6ab714322f9f3c75 commit fd5bc306ff3d8f908f36703d6ab714322f9f3c75 Author: Konstantin Belousov AuthorDate: 2025-03-20 01:52:29 +0000 Commit: Konstantin Belousov CommitDate: 2025-03-31 02:43:22 +0000 ptrace(2): expand ability to fetch syscall parameters Do not limit lwpinfo reporting of syscall number and args to SCE/SCX events. When td_sa holds the values, we can report them. Clear td_sa.code in TDA_SIG ast handler: this handler is run when the process is traced, and it is run with the last ptracestop() points before the return to userspace. This allows debugger to infer the interrupted syscall immediately after PT_ATTACH without the need to loose control to the debuggee' thread. It should work even when the debuggee is stopped in AST. Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D49430 --- sys/kern/kern_sig.c | 8 ++++++++ sys/kern/sys_process.c | 8 +++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c index d7aa932aa7e3..0ee58af7fbe4 100644 --- a/sys/kern/kern_sig.c +++ b/sys/kern/kern_sig.c @@ -343,6 +343,14 @@ ast_sig(struct thread *td, int tda) * the postsig() loop was performed. */ sigfastblock_setpend(td, resched_sigs); + + /* + * Clear td_sa.code: signal to ptrace that syscall arguments + * are unavailable after this point. This AST handler is the + * last chance for ptracestop() to signal the tracer before + * the tracee returns to userspace. + */ + td->td_sa.code = 0; } static void diff --git a/sys/kern/sys_process.c b/sys/kern/sys_process.c index 581f8f65ec56..c7dd505d97ca 100644 --- a/sys/kern/sys_process.c +++ b/sys/kern/sys_process.c @@ -1168,7 +1168,8 @@ kern_ptrace(struct thread *td, int req, pid_t pid, void *addr, int data) case PT_GET_SC_ARGS: CTR1(KTR_PTRACE, "PT_GET_SC_ARGS: pid %d", p->p_pid); - if ((td2->td_dbgflags & (TDB_SCE | TDB_SCX)) == 0 + if (((td2->td_dbgflags & (TDB_SCE | TDB_SCX)) == 0 && + td2->td_sa.code == 0) #ifdef COMPAT_FREEBSD32 || (wrap32 && !safe) #endif @@ -1511,12 +1512,9 @@ kern_ptrace(struct thread *td, int req, pid_t pid, void *addr, int data) pl->pl_sigmask = td2->td_sigmask; pl->pl_siglist = td2->td_siglist; strcpy(pl->pl_tdname, td2->td_name); - if ((td2->td_dbgflags & (TDB_SCE | TDB_SCX)) != 0) { + if (td2->td_sa.code != 0) { pl->pl_syscall_code = td2->td_sa.code; pl->pl_syscall_narg = td2->td_sa.callp->sy_narg; - } else { - pl->pl_syscall_code = 0; - pl->pl_syscall_narg = 0; } CTR6(KTR_PTRACE, "PT_LWPINFO: tid %d (pid %d) event %d flags %#x child pid %d syscall %d",