lkml.org 
[lkml]   [2017]   [Jul]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.11 37/84] MIPS: Avoid accidental raw backtrace
    Date
    4.11-stable review patch.  If anyone has any objections, please let me know.

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

    From: James Hogan <james.hogan@imgtec.com>

    commit 854236363370995a609a10b03e35fd3dc5e9e4a1 upstream.

    Since commit 81a76d7119f6 ("MIPS: Avoid using unwind_stack() with
    usermode") show_backtrace() invokes the raw backtracer when
    cp0_status & ST0_KSU indicates user mode to fix issues on EVA kernels
    where user and kernel address spaces overlap.

    However this is used by show_stack() which creates its own pt_regs on
    the stack and leaves cp0_status uninitialised in most of the code paths.
    This results in the non deterministic use of the raw back tracer
    depending on the previous stack content.

    show_stack() deals exclusively with kernel mode stacks anyway, so
    explicitly initialise regs.cp0_status to KSU_KERNEL (i.e. 0) to ensure
    we get a useful backtrace.

    Fixes: 81a76d7119f6 ("MIPS: Avoid using unwind_stack() with usermode")
    Signed-off-by: James Hogan <james.hogan@imgtec.com>
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/16656/
    Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    arch/mips/kernel/traps.c | 2 ++
    1 file changed, 2 insertions(+)

    --- a/arch/mips/kernel/traps.c
    +++ b/arch/mips/kernel/traps.c
    @@ -201,6 +201,8 @@ void show_stack(struct task_struct *task
    {
    struct pt_regs regs;
    mm_segment_t old_fs = get_fs();
    +
    + regs.cp0_status = KSU_KERNEL;
    if (sp) {
    regs.regs[29] = (unsigned long)sp;
    regs.regs[31] = 0;

    \
     
     \ /
      Last update: 2017-07-03 15:53    [W:4.089 / U:0.180 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site