• Helge Deller's avatar
    parisc: fix kernel crash when unwinding a userspace process · 7a3f5134
    Helge Deller authored
    Any user on existing parisc 32- and 64bit-kernels can easily crash
    the kernel and as such enforce a DSO.
    A simple testcase is available here:
            http://gsyprf10.external.hp.com/~deller/crash.tgz
    
    The problem is introduced by the fact, that the handle_interruption()
    crash handler calls the show_regs() function, which in turn tries to
    unwind the stack by calling parisc_show_stack().  Since the stack contains
    userspace addresses, a try to unwind the stack is dangerous and useless
    and leads to the crash.
    
    The fix is trivial: For userspace processes
    a) avoid to unwind the stack, and
    b) avoid to resolve userspace addresses to kernel symbol names.
    
    While touching this code, I converted print_symbol() to %pS
    printk formats and made parisc_show_stack() static.
    
    An initial patch for this was written by Kyle McMartin back in August:
    http://marc.info/?l=linux-parisc&m=121805168830283&w=2
    
    Compile and run-tested with a 64bit parisc kernel.
    Signed-off-by: default avatarHelge Deller <deller@gmx.de>
    Cc: Grant Grundler <grundler@parisc-linux.org>
    Cc: Matthew Wilcox <matthew@wil.cx>
    Cc: <stable@kernel.org>		[2.6.25.x, 2.6.26.x, 2.6.27.x, earlier...]
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarKyle McMartin <kyle@mcmartin.ca>
    7a3f5134
traps.c 21.3 KB