Thread (24 messages) 24 messages, 6 authors, 2021-10-14

Re: [PATCH 6/7] arch: __get_wchan || STACKTRACE_SUPPORT

From: Josh Poimboeuf <hidden>
Date: 2021-10-14 18:49:08
Also in: linux-hardening, lkml

On Thu, Oct 14, 2021 at 07:03:07PM +0100, Mark Rutland wrote:
On Fri, Oct 08, 2021 at 03:45:59PM +0200, Peter Zijlstra wrote:
quoted
On Fri, Oct 08, 2021 at 01:40:52PM +0100, Mark Rutland wrote:
quoted
[Adding Josh, since there might be a concern here from a livepatch pov]
quoted
quoted
+static unsigned long __get_wchan(struct task_struct *p)
+{
+	unsigned long entry = 0;
+
+	stack_trace_save_tsk(p, &entry, 1, 0);
This assumes stack_trace_save_tsk() will skip sched functions, but I
don't think that's ever been a requirement? It's certinaly not
documented anywhere that I could find, and arm64 doesn't do so today,
and this patch causes wchan to just log `__switch_to` for everything.
Confused, arm64 has arch_stack_walk() and should thus use
kernel/stacktrace.c's stack_trace_consume_entry_nosched.
Looking at this arm64's *current* get_wchan() unwinds once before
checking in_sched_functions(), so it skips __switch_to(). As of this
patch, we check in_sched_functions() first, which stops the unwind
immediately as __switch_to() isn't marked as __sched.

I think x86 gets away with this because switch_to() is asm, and that
tail-calls __switch_to() when returning.

Does switch_to() and below need to be marked __sched?
Yes, I would think so, for arches where they otherwise show up on the
stacktrace.

-- 
Josh
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help