Skip to content

Commit 9580b71

Browse files
chleroympe
authored andcommitted
powerpc/32: Clear on-stack exception marker upon exception return
Clear the on-stack STACK_FRAME_REGS_MARKER on exception exit in order to avoid confusing stacktrace like the one below. Call Trace: [c0e9dca0] [c01c42a0] print_address_description+0x64/0x2bc (unreliable) [c0e9dcd0] [c01c468] kasan_report+0xfc/0x180 [c0e9dd10] [c0895130] memchr+0x24/0x74 [c0e9dd30] [c00a9e38] msg_print_text+0x124/0x574 [c0e9dde0] [c00ab710] console_unlock+0x114/0x4f8 [c0e9de40] [c00adc60] vprintk_emit+0x188/0x1c4 --- interrupt: c0e9df00 at 0x400f330 LR = init_stack+0x1f00/0x2000 [c0e9de80] [c00ae3c4] printk+0xa8/0xcc (unreliable) [c0e9df20] [c0c27e44] early_irq_init+0x38/0x108 [c0e9df50] [c0c15434] start_kernel+0x310/0x488 [c0e9dff0] [00003484] 0x3484 With this patch the trace becomes: Call Trace: [c0e9dca0] [c01c42c0] print_address_description+0x64/0x2bc (unreliable) [c0e9dcd0] [c01c46a4] kasan_report+0xfc/0x180 [c0e9dd10] [c0895150] memchr+0x24/0x74 [c0e9dd30] [c00a9e58] msg_print_text+0x124/0x574 [c0e9dde0] [c00ab730] console_unlock+0x114/0x4f8 [c0e9de40] [c00adc80] vprintk_emit+0x188/0x1c4 [c0e9de80] [c00ae3e4] printk+0xa8/0xcc [c0e9df20] [c0c27e44] early_irq_init+0x38/0x108 [c0e9df50] [c0c15434] start_kernel+0x310/0x488 [c0e9dff0] [00003484] 0x3484 Cc: stable@vger.kernel.org Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
1 parent 39070a9 commit 9580b71

File tree

1 file changed

+9
-0
lines changed

1 file changed

+9
-0
lines changed

arch/powerpc/kernel/entry_32.S

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -730,6 +730,9 @@ fast_exception_return:
730730
mtcr r10
731731
lwz r10,_LINK(r11)
732732
mtlr r10
733+
/* Clear the exception_marker on the stack to avoid confusing stacktrace */
734+
li r10, 0
735+
stw r10, 8(r11)
733736
REST_GPR(10, r11)
734737
#if defined(CONFIG_PPC_8xx) && defined(CONFIG_PERF_EVENTS)
735738
mtspr SPRN_NRI, r0
@@ -961,6 +964,9 @@ END_FTR_SECTION_IFSET(CPU_FTR_NEED_PAIRED_STWCX)
961964
mtcrf 0xFF,r10
962965
mtlr r11
963966

967+
/* Clear the exception_marker on the stack to avoid confusing stacktrace */
968+
li r10, 0
969+
stw r10, 8(r1)
964970
/*
965971
* Once we put values in SRR0 and SRR1, we are in a state
966972
* where exceptions are not recoverable, since taking an
@@ -997,6 +1003,9 @@ exc_exit_restart_end:
9971003
mtlr r11
9981004
lwz r10,_CCR(r1)
9991005
mtcrf 0xff,r10
1006+
/* Clear the exception_marker on the stack to avoid confusing stacktrace */
1007+
li r10, 0
1008+
stw r10, 8(r1)
10001009
REST_2GPRS(9, r1)
10011010
.globl exc_exit_restart
10021011
exc_exit_restart:

0 commit comments

Comments
 (0)