linux/arch/parisc/kernel
Helge Deller 7a3f5134a8 parisc: fix kernel crash when unwinding a userspace process
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: Helge 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: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Kyle McMartin <kyle@mcmartin.ca>
2008-11-26 22:22:39 +00:00
..
.gitignore parisc: add arch/parisc/kernel/.gitignore 2008-10-10 16:32:28 +00:00
asm-offsets.c parisc: move pdc_result to real2.S 2008-10-10 16:32:28 +00:00
binfmt_elf32.c [PATCH] remove unused ibcs2/PER_SVR4 in SET_PERSONALITY 2008-10-16 15:40:05 +02:00
cache.c on_each_cpu(): kill unused 'retry' parameter 2008-06-26 11:24:38 +02:00
drivers.c [PARISC] display parisc device modalias in sysfs 2007-02-17 01:08:09 -05:00
entry.S Revert "parisc: fix trivial section name warnings" 2008-06-13 10:49:45 -04:00
firmware.c parisc: add pdc_coproc_cfg_unlocked and set_firmware_width_unlocked 2008-10-10 16:32:29 +00:00
hardware.c [PARISC] add back Crestone Peak cpu 2008-03-15 19:12:19 -07:00
head.S parisc: hijack jump to start_kernel 2008-10-10 16:32:30 +00:00
hpmc.S Revert "parisc: fix trivial section name warnings" 2008-06-13 10:49:45 -04:00
init_task.c [PATCH] take init_files to fs/file.c 2008-05-16 17:22:20 -04:00
inventory.c parisc: replace remaining __FUNCTION__ occurrences 2008-05-15 10:38:54 -04:00
irq.c [PARISC] timer interrupt should not be IRQ_DISABLED 2007-12-06 09:16:45 -08:00
Makefile parisc: remove -traditional from assembler flags 2008-05-15 11:03:45 -04:00
module.c lib: Correct printk %pF to work on all architectures 2008-09-09 11:51:15 -07:00
pa7300lc.c
pacache.S Revert "parisc: fix trivial section name warnings" 2008-06-13 10:49:45 -04:00
parisc_ksyms.c parisc: export copy_user_page_asm 2008-06-13 10:49:50 -04:00
pci-dma.c parisc: use non-racy method for /proc/pcxl_dma creation 2008-04-29 08:06:21 -07:00
pci.c PCI: parisc: use generic pci_enable_resources() 2008-04-20 21:47:06 -07:00
pdc_chassis.c
pdc_cons.c [PARISC] pdc_console: fix bizarre panic on boot 2008-03-15 19:12:03 -07:00
perf_asm.S Revert "parisc: fix trivial section name warnings" 2008-06-13 10:49:45 -04:00
perf_images.h
perf.c parisc-kernel-perf: BKL pushdown 2008-07-02 15:06:24 -06:00
process.c Remove fs.h from mm.h 2007-07-29 17:09:29 -07:00
processor.c [PARISC] Unbreak processor_probe when we have more than NR_CPUS 2007-10-18 00:58:57 -07:00
ptrace.c parisc: fix bug in compat_arch_ptrace 2008-11-20 13:09:17 -08:00
real2.S parisc: move pdc_result to real2.S 2008-10-10 16:32:28 +00:00
setup.c parisc: initialize unwinder much earlier 2008-10-10 16:32:30 +00:00
signal32.c parisc: fix off by one in setup_sigcontext32 2008-06-13 10:49:55 -04:00
signal32.h [PARISC] spelling fixes: arch/parisc/ 2007-05-22 22:52:16 -04:00
signal.c [PARISC] fix signal trampoline cache flushing 2008-04-15 15:51:36 -07:00
smp.c on_each_cpu(): kill unused 'retry' parameter 2008-06-26 11:24:38 +02:00
sys32.h
sys_parisc32.c compat: generic compat get/settimeofday 2008-10-16 11:21:33 -07:00
sys_parisc.c unified (weak) sys_pipe implementation 2008-05-03 13:50:33 -07:00
syscall_table.S Merge git://git.kernel.org/pub/scm/linux/kernel/git/kyle/parisc-2.6 2008-10-20 14:40:31 -07:00
syscall.S Revert "parisc: fix trivial section name warnings" 2008-06-13 10:49:45 -04:00
time.c parisc: add rtc platform driver 2008-10-10 16:32:30 +00:00
topology.c Replace remaining references to "driverfs" with "sysfs". 2007-02-17 19:13:42 +01:00
traps.c parisc: fix kernel crash when unwinding a userspace process 2008-11-26 22:22:39 +00:00
unaligned.c arch/parisc/kernel/unaligned.c: use time_* macros 2008-05-15 10:38:54 -04:00
unwind.c parisc: initialize unwinder much earlier 2008-10-10 16:32:30 +00:00
vmlinux.lds.S Merge branch 'linus' into core/rodata 2008-06-16 11:24:00 +02:00