ARM: fix a cockup in 48be69a02 (ARM: move signal handlers into a vdso-like page)
authorRussell King <rmk+kernel@arm.linux.org.uk>
Sat, 3 Aug 2013 09:30:05 +0000 (10:30 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Sat, 3 Aug 2013 09:30:05 +0000 (10:30 +0100)
commite0d407564b532d978b03ceccebd224a05d02f111
treefe3149db4e412e4f1d1e11941fcc260c0e5d287e
parenta5463cd3435475386cbbe7b06e01292ac169d36f
ARM: fix a cockup in 48be69a02 (ARM: move signal handlers into a vdso-like page)

Unfortunately, I never committed the fix to a nasty oops which can
occur as a result of that commit:

------------[ cut here ]------------
kernel BUG at /home/olof/work/batch/include/linux/mm.h:414!
Internal error: Oops - BUG: 0 [#1] PREEMPT SMP ARM
Modules linked in:
CPU: 0 PID: 490 Comm: killall5 Not tainted 3.11.0-rc3-00288-gabe0308 #53
task: e90acac0 ti: e9be8000 task.ti: e9be8000
PC is at special_mapping_fault+0xa4/0xc4
LR is at __do_fault+0x68/0x48c

This doesn't show up unless you do quite a bit of testing; a simple
boot test does not do this, so all my nightly tests were passing fine.

The reason for this is that install_special_mapping() expects the
page array to stick around, and as this was only inserting one page
which was stored on the kernel stack, that's why this was blowing up.

Reported-by: Olof Johansson <olof@lixom.net>
Tested-by: Olof Johansson <olof@lixom.net>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/kernel/process.c
arch/arm/kernel/signal.c