From nobody Mon Feb 21 13:48:59 2022 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 BBC1B183A4C7; Mon, 21 Feb 2022 13:49:01 +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 "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4K2Nv05rClz3PtK; Mon, 21 Feb 2022 13:49:00 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1645451341; 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=JbdDhJH9qx1LTAZ68ej0zz6cKCgFb5htYXkeZ9GdBsI=; b=DV6dMSWyvfyHYYMWCbZnqmMnO+7NsvyYo7ViJpDIjFwBZblRJaKLpzh5RY1zrOKItSqlb0 CyQSQ/v9Pq3KizSObf30nSepT+ExeCPpeO0px4nzZhbrKZqoDNVMOTXX+L+xoZgGQE998y QHN6sLHrfpkit8odzdBJozMOuck1v4wPrZH0OpP8bGuLHu3+Q0IDvNb5JlRikfn21b25NL qqJV6FW5eO+byoEp0CHstO5w08mFxjeVI/5TAigyRxNSZQuEMKG04B9uI1/jzpEIh+68vB E447/tP/Yuk6CrW57JwFqouZPO4xCZtOlMzgR0B/r4qAtXI8s6s4GtpzRdsxRg== 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 F3143114C9; Mon, 21 Feb 2022 13:48:59 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 21LDmxcj092025; Mon, 21 Feb 2022 13:48:59 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 21LDmxjk092024; Mon, 21 Feb 2022 13:48:59 GMT (envelope-from git) Date: Mon, 21 Feb 2022 13:48:59 GMT Message-Id: <202202211348.21LDmxjk092024@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Edward Tomasz Napierala Subject: git: fc36cd43fd7f - stable/13 - linux: implement PTRACE_EVENT_EXEC 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: Sender: owner-dev-commits-src-branches@freebsd.org X-BeenThere: dev-commits-src-branches@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: trasz X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: fc36cd43fd7f03261d608ceaa69e8c46ef3e0c38 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1645451341; 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=JbdDhJH9qx1LTAZ68ej0zz6cKCgFb5htYXkeZ9GdBsI=; b=rbGmyU8KjXvk1EYDKughKqsmteIItp0ht0sgzYm+itVbMhtp7jQsODKDrbmfdzbx6rHIJJ z7auC8zOvQdSG4k18tBuez7OwQLO71lj+BBaJuFgY85TvWlJUnQBuwfYVCJzh8rkPxAQlO K+VWcvHSEtiLCPw3jwnezb6d0C/2unn1gaHSQvzj/zfZRy05pE654NuBJR0iYZhW6WWA40 zukEDU4nMS51TlCe5GlW2O8XsgT9Dzm2GQWcDezBrL4QNbp0sr4qoHDAo1eyKG5l0tShcn JV6oIfOfjQQGEhxkKIUHUw5DhDHdEC5WolpWPvxlLlEbiP8S5a3iUCNoXnCRRA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1645451341; a=rsa-sha256; cv=none; b=qXzuXwOwyznKUS3ipswhC43oX37lQ4/P+4qglXGgcDLp5BlnJ6wfxdmUi+WvM8BFawT1cP WDwT85Og+nvWemDZQCxue6KqRLkaqk73V2otPW5R1/B8XeXpt473ZhJ8PaB3HmNYafr+KX u8RNnJ/6gH+DJAiY3RkjxHNLA9g2FeFnFnHVpVs3sbF5KA2MMLq8pFhEF6obHIBxmX5XGO IJX51Tf4pc1m1Cf5aaZ/LGByDt1xhmZrYcJBxqhV8cz6fecb/xrm9KHxUQnS+X3nWQ3YQc mwyIavwzG+hiO6hjR5t92zVflNgxnuffqD4ZVzKbA6HODn1Zyjyy25wL7OgAUg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch stable/13 has been updated by trasz: URL: https://cgit.FreeBSD.org/src/commit/?id=fc36cd43fd7f03261d608ceaa69e8c46ef3e0c38 commit fc36cd43fd7f03261d608ceaa69e8c46ef3e0c38 Author: Edward Tomasz Napierala AuthorDate: 2021-10-23 18:13:14 +0000 Commit: Edward Tomasz Napierala CommitDate: 2022-02-21 13:35:51 +0000 linux: implement PTRACE_EVENT_EXEC This fixes strace(1) from Ubuntu Focal. Reviewed By: jhb Sponsored By: EPSRC Differential Revision: https://reviews.freebsd.org/D32367 (cherry picked from commit 6e66030c4c05331f9b0adf87c31f2f233dd3ae1f) --- sys/amd64/linux/linux_ptrace.c | 9 +++++++-- sys/kern/subr_syscall.c | 12 ++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/sys/amd64/linux/linux_ptrace.c b/sys/amd64/linux/linux_ptrace.c index e87e0a63f5b4..7abb9c5ee933 100644 --- a/sys/amd64/linux/linux_ptrace.c +++ b/sys/amd64/linux/linux_ptrace.c @@ -72,6 +72,7 @@ __FBSDID("$FreeBSD$"); #define LINUX_PTRACE_SEIZE 0x4206 #define LINUX_PTRACE_GET_SYSCALL_INFO 0x420e +#define LINUX_PTRACE_EVENT_EXEC 4 #define LINUX_PTRACE_EVENT_EXIT 6 #define LINUX_PTRACE_O_TRACESYSGOOD 1 @@ -152,8 +153,12 @@ linux_ptrace_status(struct thread *td, pid_t pid, int status) lwpinfo.pl_flags & PL_FLAG_SCE) status |= (LINUX_SIGTRAP | 0x80) << 8; if ((pem->ptrace_flags & LINUX_PTRACE_O_TRACESYSGOOD) && - lwpinfo.pl_flags & PL_FLAG_SCX) - status |= (LINUX_SIGTRAP | 0x80) << 8; + lwpinfo.pl_flags & PL_FLAG_SCX) { + if (lwpinfo.pl_flags & PL_FLAG_EXEC) + status |= (LINUX_SIGTRAP | LINUX_PTRACE_EVENT_EXEC << 8) << 8; + else + status |= (LINUX_SIGTRAP | 0x80) << 8; + } if ((pem->ptrace_flags & LINUX_PTRACE_O_TRACEEXIT) && lwpinfo.pl_flags & PL_FLAG_EXITED) status |= (LINUX_SIGTRAP | LINUX_PTRACE_EVENT_EXIT << 8) << 8; diff --git a/sys/kern/subr_syscall.c b/sys/kern/subr_syscall.c index 85a0814a2125..dee81ba0fa48 100644 --- a/sys/kern/subr_syscall.c +++ b/sys/kern/subr_syscall.c @@ -255,6 +255,18 @@ syscallret(struct thread *td) if (__predict_false(traced || (td->td_dbgflags & (TDB_EXEC | TDB_FORK)) != 0)) { PROC_LOCK(p); + /* + * Linux debuggers expect an additional stop for exec, + * between the usual syscall entry and exit. Raise + * the exec event now and then clear TDB_EXEC so that + * the next stop is reported as a syscall exit by + * linux_ptrace_status(). + */ + if ((td->td_dbgflags & TDB_EXEC) != 0 && + SV_PROC_ABI(td->td_proc) == SV_ABI_LINUX) { + ptracestop(td, SIGTRAP, NULL); + td->td_dbgflags &= ~TDB_EXEC; + } /* * If tracing the execed process, trap to the debugger * so that breakpoints can be set before the program