linux-stable/arch/arm
Jonathan Austin 9dfc28b630 ARM: mpu: protect the vectors page with an MPU region
Without an MMU it is possible for userspace programs to start executing code
in places that they have no business executing. The MPU allows some level of
protection against this.

This patch protects the vectors page from access by userspace processes.
Userspace tasks that dereference a null pointer are already protected by an
svc at 0x0 that kills them. However when tasks use an offset from a null
pointer (eg a function in a null struct) they miss this carefully placed svc
and enter the exception vectors in user mode, ending up in the kernel.

This patch causes programs that do this to receive a SEGV instead of happily
entering the kernel in user-mode, and hence avoid a 'Bad Mode' panic.

As part of this change it is necessary to make sigreturn happen via the
stack when there is not an sa_restorer function. This change is invisible to
userspace, and irrelevant to code compiled using a uClibc toolchain, which
always uses an sa_restorer function.

Because we don't get to remap the vectors in !MMU kuser_helpers are not
in a defined location, and hence aren't usable. This means we don't need to
worry about keeping them accessible from PL0

Signed-off-by: Jonathan Austin <jonathan.austin@arm.com>
Reviewed-by: Will Deacon <will.deacon@arm.com>
CC: Nicolas Pitre <nico@linaro.org>
CC: Catalin Marinas <catalin.marinas@arm.com>
2013-06-17 15:13:18 +01:00
..
boot ARM: exynos: dts: Fixed vbus-gpios 2013-05-09 13:25:23 -07:00
common Merge branch 'fixes' of git://git.linaro.org/people/rmk/linux-arm 2013-05-15 13:37:54 -07:00
configs Omap fixes for things that were discovered during the merge window: 2013-05-09 13:13:57 -07:00
crypto
include ARM: mpu: protect the vectors page with an MPU region 2013-06-17 15:13:18 +01:00
kernel ARM: mpu: protect the vectors page with an MPU region 2013-06-17 15:13:18 +01:00
kvm Merge tag 'kvm-3.10-1' of git://git.kernel.org/pub/scm/virt/kvm/kvm 2013-05-05 14:47:31 -07:00
lib
mach-at91 ARM: arm-soc: late cleanups 2013-05-07 11:22:14 -07:00
mach-bcm ARM: platform specific firmware interfaces for 3.10 2013-05-04 12:33:36 -07:00
mach-bcm2835
mach-clps711x
mach-cns3xxx ARM: arm-soc multiplatform updates for 3.10 2013-05-02 09:38:16 -07:00
mach-davinci ARM: arm-soc device tree changes, part 2 2013-05-07 11:06:17 -07:00
mach-dove arm: mach-dove: convert to use mvebu-mbus driver 2013-04-15 14:06:27 +00:00
mach-ebsa110
mach-ep93xx
mach-exynos ARM: EXYNOS5: Fix kernel dump in AFTR idle mode 2013-05-09 13:22:22 -07:00
mach-footbridge
mach-gemini ARM: arm-soc cleanup for 3.10 2013-05-02 09:03:55 -07:00
mach-highbank ARM: arm-soc: late cleanups 2013-05-07 11:22:14 -07:00
mach-imx ARM: imx: Select GENERIC_ALLOCATOR 2013-05-09 13:05:24 -07:00
mach-integrator ARM: arm-soc: late cleanups 2013-05-07 11:22:14 -07:00
mach-iop13xx
mach-iop32x
mach-iop33x
mach-ixp4xx arm: Use generic idle loop 2013-04-08 17:39:24 +02:00
mach-kirkwood ARM: arm-soc platform updates for 3.10, part 3 2013-05-07 11:02:18 -07:00
mach-ks8695
mach-lpc32xx
mach-mmp ARM: arm-soc board specific changes for 3.10, part 1 2013-05-04 12:34:30 -07:00
mach-msm proc: Use PDE attribute setting accessor functions 2013-05-07 15:01:11 -04:00
mach-mv78xx0 arm: mach-mv78xx0: convert to use the mvebu-mbus driver 2013-04-15 14:06:39 +00:00
mach-mvebu ARM: arm-soc: late cleanups 2013-05-07 11:22:14 -07:00
mach-mxs ARM: arm-soc device tree changes, part 2 2013-05-07 11:06:17 -07:00
mach-netx
mach-nomadik clocksource: nomadik-mtu: fix up clocksource/timer 2013-04-26 17:10:46 -07:00
mach-omap1 ARM: OMAP1: DMA: fix error handling in omap1_system_dma_init() 2013-05-08 16:48:02 -07:00
mach-omap2 Omap fixes for things that were discovered during the merge window: 2013-05-09 13:13:57 -07:00
mach-orion5x ARM: arm-soc platform updates for 3.10, part 3 2013-05-07 11:02:18 -07:00
mach-picoxcell
mach-prima2 Merge branch 'late/fixes' into fixes 2013-05-09 13:05:15 -07:00
mach-pxa - Lots of cleanups from Artem, including deletion of some obsolete drivers 2013-05-09 10:15:46 -07:00
mach-realview Merge branch 'for-linus' of git://git.linaro.org/people/rmk/linux-arm 2013-05-03 09:13:19 -07:00
mach-rpc
mach-s3c24xx ARM: arm-soc driver changes for 3.10 2013-05-04 12:31:18 -07:00
mach-s3c64xx For 3.10 we have a few new MFD drivers for: 2013-05-05 17:36:20 -07:00
mach-s5p64x0 Merge branch 'samsung/exynos-multiplatform' into next/drivers 2013-04-19 16:50:56 +02:00
mach-s5pc100 ARM: arm-soc driver changes for 3.10 2013-05-04 12:31:18 -07:00
mach-s5pv210 ARM: arm-soc driver changes for 3.10 2013-05-04 12:31:18 -07:00
mach-sa1100 cpufreq: sa11x0: move cpufreq driver to drivers/cpufreq 2013-04-10 13:19:24 +02:00
mach-shark arm: Use generic idle loop 2013-04-08 17:39:24 +02:00
mach-shmobile ARM: arm-soc: late cleanups 2013-05-07 11:22:14 -07:00
mach-socfpga Merge branch 'gic/cleanup' into next/soc 2013-04-28 15:06:56 -07:00
mach-spear Merge branch 'late/fixes' into fixes 2013-05-09 13:05:15 -07:00
mach-sunxi ARM: sunxi: Rework the restart code 2013-04-08 21:43:08 +02:00
mach-tegra arch/arm/mach-tegra: don't check resource with devm_ioremap_resource 2013-05-18 11:58:05 +02:00
mach-u300 ARM: u300: fix ages old copy/paste bug 2013-04-26 17:07:38 -07:00
mach-ux500 ARM: ux500: Rid ignored return value of regulator_enable() compiler warning 2013-05-09 13:10:10 -07:00
mach-versatile ARM: versatile: use OF init for sp804 timer 2013-04-11 15:11:21 -05:00
mach-vexpress Moves xenvm to mach-virt. 2013-05-07 15:11:43 -07:00
mach-virt arm: introduce psci_smp_ops 2013-05-21 14:24:11 +00:00
mach-vt8500 irqchip: vt8500: Convert arch-vt8500 to new irqchip infrastructure 2013-04-12 22:43:24 -07:00
mach-w90x900 arm: Use generic idle loop 2013-04-08 17:39:24 +02:00
mach-zynq ARM: arm-soc platform updates for 3.10, part 3 2013-05-07 11:02:18 -07:00
mm ARM: mpu: Complete initialisation of the MPU after reaching the C-world 2013-06-07 17:02:53 +01:00
net
nwfpe
oprofile
plat-iop
plat-omap ARM: arm-soc device tree changes, part 2 2013-05-07 11:06:17 -07:00
plat-orion Removal of GENERIC_GPIO for v3.10 2013-05-09 09:59:16 -07:00
plat-pxa
plat-samsung arch/arm/plat-samsung: don't check resource with devm_ioremap_resource 2013-05-18 11:59:33 +02:00
plat-versatile
tools
vfp
xen xen/arm: rename xen_secondary_init and run it on every online cpu 2013-05-13 16:14:25 +00:00
Kconfig ARM: mpu: Allow enabling of the MPU via kconfig 2013-06-17 15:13:03 +01:00
Kconfig-nommu ARM: mpu: Allow enabling of the MPU via kconfig 2013-06-17 15:13:03 +01:00
Kconfig.debug ARM: vexpress: Add Cortex-R Series UART, selectable via DEBUG_LL 2013-06-07 17:02:48 +01:00
Makefile Merge branch 'for-next' of git://git.pengutronix.de/git/ukl/linux into devel-stable 2013-05-22 10:52:24 +01:00