]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
entry,unwind/deferred: Fix unwind_reset_info() placement
authorPeter Zijlstra <peterz@infradead.org>
Wed, 5 Nov 2025 10:00:14 +0000 (11:00 +0100)
committerPeter Zijlstra <peterz@infradead.org>
Wed, 5 Nov 2025 12:57:32 +0000 (13:57 +0100)
Stephen reported that on KASAN builds he's seeing:

vmlinux.o: warning: objtool: user_exc_vmm_communication+0x15a: call to __kasan_check_read() leaves .noinstr.text section
vmlinux.o: warning: objtool: exc_debug_user+0x182: call to __kasan_check_read() leaves .noinstr.text section
vmlinux.o: warning: objtool: exc_int3+0x123: call to __kasan_check_read() leaves .noinstr.text section
vmlinux.o: warning: objtool: noist_exc_machine_check+0x17a: call to __kasan_check_read() leaves .noinstr.text section
vmlinux.o: warning: objtool: fred_exc_machine_check+0x17e: call to __kasan_check_read() leaves .noinstr.text section

This turns out to be atomic ops from unwind_reset_info() that have
explicit instrumentation. Place unwind_reset_info() in the preceding
instrumentation_begin() section.

Fixes: c6439bfaabf2 ("Merge tag 'trace-deferred-unwind-v6.17' of git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace")
Reported-by: Stephen Rothwell <sfr@canb.auug.org.au>
Reported-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://patch.msgid.link/20251105100014.GY4068168@noisy.programming.kicks-ass.net
include/linux/irq-entry-common.h

index d643c7c87822e197c30bfc3bf8cb41f7d30a78dd..ba1ed42f8a1c2926c4dc23dd23e655f684d775c3 100644 (file)
@@ -253,11 +253,11 @@ static __always_inline void exit_to_user_mode_prepare(struct pt_regs *regs)
 static __always_inline void exit_to_user_mode(void)
 {
        instrumentation_begin();
+       unwind_reset_info();
        trace_hardirqs_on_prepare();
        lockdep_hardirqs_on_prepare();
        instrumentation_end();
 
-       unwind_reset_info();
        user_enter_irqoff();
        arch_exit_to_user_mode();
        lockdep_hardirqs_on(CALLER_ADDR0);