lkml.org 
[lkml]   [2019]   [Mar]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.0 156/238] powerpc/32: Clear on-stack exception marker upon exception return
    Date
    5.0-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Christophe Leroy <christophe.leroy@c-s.fr>

    commit 9580b71b5a7863c24a9bd18bcd2ad759b86b1eff upstream.

    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] [c01c4684] 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>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    arch/powerpc/kernel/entry_32.S | 9 +++++++++
    1 file changed, 9 insertions(+)

    --- a/arch/powerpc/kernel/entry_32.S
    +++ b/arch/powerpc/kernel/entry_32.S
    @@ -745,6 +745,9 @@ fast_exception_return:
    mtcr r10
    lwz r10,_LINK(r11)
    mtlr r10
    + /* Clear the exception_marker on the stack to avoid confusing stacktrace */
    + li r10, 0
    + stw r10, 8(r11)
    REST_GPR(10, r11)
    #if defined(CONFIG_PPC_8xx) && defined(CONFIG_PERF_EVENTS)
    mtspr SPRN_NRI, r0
    @@ -982,6 +985,9 @@ END_FTR_SECTION_IFSET(CPU_FTR_NEED_PAIRE
    mtcrf 0xFF,r10
    mtlr r11

    + /* Clear the exception_marker on the stack to avoid confusing stacktrace */
    + li r10, 0
    + stw r10, 8(r1)
    /*
    * Once we put values in SRR0 and SRR1, we are in a state
    * where exceptions are not recoverable, since taking an
    @@ -1021,6 +1027,9 @@ exc_exit_restart_end:
    mtlr r11
    lwz r10,_CCR(r1)
    mtcrf 0xff,r10
    + /* Clear the exception_marker on the stack to avoid confusing stacktrace */
    + li r10, 0
    + stw r10, 8(r1)
    REST_2GPRS(9, r1)
    .globl exc_exit_restart
    exc_exit_restart:

    \
     
     \ /
      Last update: 2019-03-22 13:27    [W:2.918 / U:0.452 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site