From: Steven Rostedt <rostedt@kernel.org>
To: linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org,
bpf@vger.kernel.org, x86@kernel.org
Cc: Masami Hiramatsu <mhiramat@kernel.org>,
Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
Josh Poimboeuf <jpoimboe@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@kernel.org>, Jiri Olsa <jolsa@kernel.org>,
Namhyung Kim <namhyung@kernel.org>,
Thomas Gleixner <tglx@linutronix.de>,
Andrii Nakryiko <andrii@kernel.org>,
Indu Bhagat <indu.bhagat@oracle.com>,
"Jose E. Marchesi" <jemarch@gnu.org>,
Beau Belgrave <beaub@linux.microsoft.com>,
Jens Remus <jremus@linux.ibm.com>,
Linus Torvalds <torvalds@linux-foundation.org>,
Andrew Morton <akpm@linux-foundation.org>,
Jens Axboe <axboe@kernel.dk>, Florian Weimer <fweimer@redhat.com>,
Sam James <sam@gentoo.org>
Subject: [PATCH v14 12/12] unwind deferred/x86: Do not defer stack tracing for compat tasks
Date: Wed, 16 Jul 2025 20:49:22 -0400 [thread overview]
Message-ID: <20250717004958.432327787@kernel.org> (raw)
In-Reply-To: 20250717004910.297898999@kernel.org
From: Steven Rostedt <rostedt@goodmis.org>
Currently compat tasks are not supported. If a deferred user space stack
trace is requested on a compat task, it should fail and return an error so
that the profiler can use an alternative approach (whatever it uses
today).
Add a arch_unwind_can_defer() macro that is called in
unwind_deferred_request(). Have x86 define it to a function that makes
sure that the current task is running in 64bit mode, and if it is not, it
returns false. This will cause unwind_deferred_request() to error out and
the caller can use the current method of user space stack tracing.
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
---
arch/x86/include/asm/unwind_user.h | 11 +++++++++++
include/linux/unwind_deferred.h | 5 +++++
kernel/unwind/deferred.c | 3 +++
3 files changed, 19 insertions(+)
diff --git a/arch/x86/include/asm/unwind_user.h b/arch/x86/include/asm/unwind_user.h
index 8597857bf896..220fd0a6e175 100644
--- a/arch/x86/include/asm/unwind_user.h
+++ b/arch/x86/include/asm/unwind_user.h
@@ -2,6 +2,17 @@
#ifndef _ASM_X86_UNWIND_USER_H
#define _ASM_X86_UNWIND_USER_H
+#ifdef CONFIG_IA32_EMULATION
+/* Currently compat mode is not supported for deferred stack trace */
+static inline bool arch_unwind_can_defer(void)
+{
+ struct pt_regs *regs = task_pt_regs(current);
+
+ return user_64bit_mode(regs);
+}
+# define arch_unwind_can_defer arch_unwind_can_defer
+#endif /* CONFIG_IA32_EMULATION */
+
#define ARCH_INIT_USER_FP_FRAME \
.cfa_off = (s32)sizeof(long) * 2, \
.ra_off = (s32)sizeof(long) * -1, \
diff --git a/include/linux/unwind_deferred.h b/include/linux/unwind_deferred.h
index 26122d00708a..0124865aaab4 100644
--- a/include/linux/unwind_deferred.h
+++ b/include/linux/unwind_deferred.h
@@ -16,6 +16,11 @@ struct unwind_work {
int bit;
};
+/* Architectures can add a test to not defer unwinding */
+#ifndef arch_unwind_can_defer
+# define arch_unwind_can_defer() (true)
+#endif
+
#ifdef CONFIG_UNWIND_USER
enum {
diff --git a/kernel/unwind/deferred.c b/kernel/unwind/deferred.c
index 53a75f8f9b7e..9972096e93e8 100644
--- a/kernel/unwind/deferred.c
+++ b/kernel/unwind/deferred.c
@@ -237,6 +237,9 @@ int unwind_deferred_request(struct unwind_work *work, u64 *cookie)
*cookie = 0;
+ if (!arch_unwind_can_defer())
+ return -EINVAL;
+
if ((current->flags & (PF_KTHREAD | PF_EXITING)) ||
!user_mode(task_pt_regs(current)))
return -EINVAL;
--
2.47.2
next prev parent reply other threads:[~2025-07-17 0:49 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-17 0:49 [PATCH v14 00/12] unwind_user: x86: Deferred unwinding infrastructure Steven Rostedt
2025-07-17 0:49 ` [PATCH v14 01/12] unwind_user: Add user space unwinding API with frame pointer support Steven Rostedt
2025-07-17 0:49 ` [PATCH v14 02/12] unwind_user/deferred: Add unwind_user_faultable() Steven Rostedt
2025-07-17 0:49 ` [PATCH v14 03/12] unwind_user/deferred: Add unwind cache Steven Rostedt
2025-07-17 0:49 ` [PATCH v14 04/12] unwind_user/deferred: Add deferred unwinding interface Steven Rostedt
2025-07-17 0:49 ` [PATCH v14 05/12] unwind_user/deferred: Make unwind deferral requests NMI-safe Steven Rostedt
2025-07-17 0:49 ` [PATCH v14 06/12] unwind deferred: Use bitmask to determine which callbacks to call Steven Rostedt
2025-07-17 0:49 ` [PATCH v14 07/12] unwind deferred: Add unwind_completed mask to stop spurious callbacks Steven Rostedt
2025-07-17 0:49 ` [PATCH v14 08/12] unwind: Add USED bit to only have one conditional on way back to user space Steven Rostedt
2025-07-17 0:49 ` [PATCH v14 09/12] unwind deferred: Use SRCU unwind_deferred_task_work() Steven Rostedt
2025-07-17 4:43 ` Paul E. McKenney
2025-07-17 12:25 ` Steven Rostedt
2025-07-17 15:48 ` Paul E. McKenney
2025-07-17 16:10 ` Steven Rostedt
2025-07-17 16:27 ` Paul E. McKenney
2025-07-17 16:38 ` Steven Rostedt
2025-07-17 16:54 ` Paul E. McKenney
2025-07-17 0:49 ` [PATCH v14 10/12] unwind: Finish up unwind when a task exits Steven Rostedt
2025-07-17 0:49 ` [PATCH v14 11/12] unwind_user/x86: Enable frame pointer unwinding on x86 Steven Rostedt
2025-07-17 0:49 ` Steven Rostedt [this message]
2025-07-17 0:51 ` [PATCH v14 00/12] unwind_user: x86: Deferred unwinding infrastructure Steven Rostedt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250717004958.432327787@kernel.org \
--to=rostedt@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=andrii@kernel.org \
--cc=axboe@kernel.dk \
--cc=beaub@linux.microsoft.com \
--cc=bpf@vger.kernel.org \
--cc=fweimer@redhat.com \
--cc=indu.bhagat@oracle.com \
--cc=jemarch@gnu.org \
--cc=jolsa@kernel.org \
--cc=jpoimboe@kernel.org \
--cc=jremus@linux.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=mhiramat@kernel.org \
--cc=mingo@kernel.org \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
--cc=sam@gentoo.org \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.