"Naveen N. Rao" <[email protected]> writes: > Daniel Axtens wrote: >> Make our stack-walking code KASAN-safe by using READ_ONCE_NOCHECK - >> generic code, arm64, s390 and x86 all do this for similar sorts of >> reasons: when unwinding a stack, we might touch memory that KASAN has >> marked as being out-of-bounds. In ppc64 KASAN development, I hit this >> sometimes when checking for an exception frame - because we're checking >> an arbitrary offset into the stack frame. >> >> See commit 20955746320e ("s390/kasan: avoid false positives during stack >> unwind"), commit bcaf669b4bdb ("arm64: disable kasan when accessing >> frame->fp in unwind_frame"), commit 91e08ab0c851 ("x86/dumpstack: >> Prevent KASAN false positive warnings") and commit 6e22c8366416 >> ("tracing, kasan: Silence Kasan warning in check_stack of stack_tracer"). >> >> Signed-off-by: Daniel Axtens <[email protected]> >> --- >> arch/powerpc/kernel/process.c | 16 +++++++++------- >> 1 file changed, 9 insertions(+), 7 deletions(-) >> >> diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c >> index 89e34aa273e2..430cf06f9406 100644 >> --- a/arch/powerpc/kernel/process.c >> +++ b/arch/powerpc/kernel/process.c >> @@ -2151,8 +2151,8 @@ void show_stack(struct task_struct *tsk, unsigned long >> *stack, >> break; >> >> stack = (unsigned long *) sp; >> - newsp = stack[0]; >> - ip = stack[STACK_FRAME_LR_SAVE]; >> + newsp = READ_ONCE_NOCHECK(stack[0]); >> + ip = READ_ONCE_NOCHECK(stack[STACK_FRAME_LR_SAVE]); > > Just curious: > Given that we validate the stack pointer before these accesses, can we > annotate show_stack() with __no_sanitize_address instead? > > I ask because we have other places where we walk the stack: > arch_stack_walk(), as well as in perf callchain. Similar changes will be > needed there as well.
Oh good points. Yes, it probably makes most sense to mark all the functions with __no_sanitize_address, that resolves Christophe's issue as well. I'll send a v2. Kind regards, Daniel > > > - Naveen
