• James Hogan's avatar
    MIPS: Don't unwind to user mode with EVA · dd95033f
    James Hogan authored
    [ Upstream commit a816b306 ]
    
    When unwinding through IRQs and exceptions, the unwinding only continues
    if the PC is a kernel text address, however since EVA it is possible for
    user and kernel address ranges to overlap, potentially allowing
    unwinding to continue to user mode if the user PC happens to be in the
    kernel text address range.
    
    Adjust the check to also ensure that the register state from before the
    exception is actually running in kernel mode, i.e. !user_mode(regs).
    
    I don't believe any harm can come of this problem, since the PC is only
    output, the stack pointer is checked to ensure it resides within the
    task's stack page before it is dereferenced in search of the return
    address, and the return address register is similarly only output (if
    the PC is in a leaf function or the beginning of a non-leaf function).
    
    However unwind_stack() is only meant for unwinding kernel code, so to be
    correct the unwind should stop there.
    Signed-off-by: default avatarJames Hogan <james.hogan@imgtec.com>
    Reviewed-by: default avatarLeonid Yegoshin <Leonid.Yegoshin@imgtec.com>
    Cc: linux-mips@linux-mips.org
    Cc: <stable@vger.kernel.org> # 3.15+
    Patchwork: https://patchwork.linux-mips.org/patch/11700/Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
    Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
    dd95033f
process.c 16.2 KB