2
0
mirror of https://github.com/edk2-porting/linux-next.git synced 2024-12-23 12:43:55 +08:00
linux-next/arch/arm/kernel
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
..
.gitignore
arch_timer.c ARM: convert arm/arm64 arch timer to use CLKSRC_OF init 2013-04-11 15:11:15 -05:00
armksyms.c Merge branches 'audit', 'delay', 'fixes', 'misc' and 'sta2x11' into for-linus 2012-07-27 23:06:32 +01:00
arthur.c
asm-offsets.c Merge tag 'kvm-3.10-1' of git://git.kernel.org/pub/scm/virt/kvm/kvm 2013-05-05 14:47:31 -07:00
atags_compat.c ARM: 7505/1: split out ATAGS parsing 2012-09-03 22:55:56 +01:00
atags_parse.c ARM: 7505/1: split out ATAGS parsing 2012-09-03 22:55:56 +01:00
atags_proc.c procfs: new helper - PDE_DATA(inode) 2013-04-09 14:13:32 -04:00
atags.h ARM: 7506/1: allow for ATAGS to be configured out when DT support is selected 2012-09-03 22:56:15 +01:00
bios32.c ARM: 7683/1: pci: add a align_resource hook 2013-04-03 16:56:11 +01:00
calls.S ARM: 7665/1: Wire up kcmp syscall 2013-03-03 22:54:18 +00:00
cpuidle.c cpuidle: Add common time keeping and irq enabling 2012-03-21 01:59:40 -04:00
crash_dump.c crash_dump: export is_kdump_kernel to modules, consolidate elfcorehdr_addr, setup_elfcorehdr and saved_max_pfn 2011-03-23 19:47:19 -07:00
debug.S ARM: compile fix for DEBUG_LL=y && MMU=n 2013-01-16 14:30:06 -08:00
devtree.c ARM: default machine descriptor for multiplatform 2013-04-29 21:56:57 +02:00
dma-isa.c
dma.c locking, ARM: Annotate low level hw locks as raw 2011-09-13 11:12:14 +02:00
early_printk.c early_printk: consolidate random copies of identical code 2013-04-29 18:28:13 -07:00
elf.c Disintegrate asm/system.h for ARM 2012-03-28 18:30:01 +01:00
entry-armv.S Merge branch 'cleanup' into for-linus 2013-05-02 21:31:29 +01:00
entry-common.S Merge branch 'for-next' of git://git.pengutronix.de/git/ukl/linux into devel-stable 2013-05-22 10:52:24 +01:00
entry-header.S Merge branch 'for-next' of git://git.pengutronix.de/git/ukl/linux into devel-stable 2013-05-22 10:52:24 +01:00
entry-v7m.S ARM: ARMv7-M: Add support for exception handling 2013-04-17 21:44:46 +02:00
etm.c ARM/etm/sysrq: fix inconstistent help message of sysrq key 2013-04-30 17:04:10 -07:00
fiq.c ARM: fiq: change FIQ_START to a variable 2012-07-01 21:59:19 +08:00
fiqasm.S ARM: 6938/1: fiq: Refactor {get,set}_fiq_regs() for Thumb-2 2011-05-26 10:31:06 +01:00
ftrace.c ARM: 7468/1: ftrace: Trace function entry before updating index 2012-07-31 10:30:42 +01:00
head-common.S ARM: make cr_alignment read-only #ifndef CONFIG_CPU_CP15 2013-01-31 21:44:45 +01:00
head-nommu.S ARM: mpu: protect the vectors page with an MPU region 2013-06-17 15:13:18 +01:00
head.S ARM: 7690/1: mm: fix CONFIG_LPAE typos 2013-04-03 16:45:51 +01:00
hw_breakpoint.c ARM: 7697/1: hw_breakpoint: do not use __cpuinitdata for dbg_cpu_pm_nb 2013-04-17 16:54:06 +01:00
hyp-stub.S ARM: virt: simplify __hyp_stub_install epilog 2013-01-10 21:08:55 +00:00
insn.c ARM: fix missing bug.h include in arch/arm/kernel/insn.c 2012-03-30 11:51:46 +01:00
insn.h ARM: 7334/1: add jump label support 2012-03-24 09:38:56 +00:00
io.c arm: convert core files from module.h to export.h 2011-10-31 19:30:49 -04:00
irq.c ARM: irq: Call irqchip_init if no init_irq function is specified 2013-04-02 11:05:40 -07:00
isa.c
iwmmxt.S ARM: pxa: fix logic error in PJ4 iWMMXt handling 2011-08-11 10:10:26 +08:00
jump_label.c ARM: 7334/1: add jump label support 2012-03-24 09:38:56 +00:00
kgdb.c kgdb,arm: fix register dump 2010-10-29 13:14:40 -05:00
kprobes-arm.c ARM: 7181/1: Restrict kprobes probing SWP instructions to ARMv5 and below 2011-11-30 23:54:54 +00:00
kprobes-common.c Disintegrate asm/system.h for ARM 2012-03-28 18:30:01 +01:00
kprobes-test-arm.c ARM: kprobes: make more tests conditional 2012-10-09 17:07:43 +02:00
kprobes-test-thumb.c ARM: 7174/1: Fix build error in kprobes test code on Thumb2 kernels 2011-11-26 21:58:53 +00:00
kprobes-test.c treewide: fix printk typo in multiple drivers 2012-11-19 11:08:17 +01:00
kprobes-test.h ARM: 7174/1: Fix build error in kprobes test code on Thumb2 kernels 2011-11-26 21:58:53 +00:00
kprobes-thumb.c ARM: 7423/1: kprobes: run t32_simulate_ldr_literal() without insn slot 2012-06-14 15:11:44 +01:00
kprobes.c hlist: drop the node parameter from iterators 2013-02-27 19:10:24 -08:00
kprobes.h ARM: kprobes: Add exports for test code 2011-09-20 18:17:43 +00:00
machine_kexec.c ARM: 7555/1: kexec: fix segment memory addresses check 2012-10-18 11:05:19 +01:00
Makefile ARM: nommu: Don't build smp_tlb.c for !CONFIG_MMU 2013-06-07 17:02:45 +01:00
module.c ARM: 7059/1: LPAE: Use PMD_(SHIFT|SIZE|MASK) instead of PGDIR_* 2011-08-23 15:30:33 +01:00
opcodes.c ARM: 7206/1: Add generic ARM instruction set condition code checks. 2011-12-13 08:52:02 +00:00
patch.c ARM: 7332/1: extract out code patch function from kprobes 2012-03-24 09:38:55 +00:00
patch.h ARM: 7332/1: extract out code patch function from kprobes 2012-03-24 09:38:55 +00:00
perf_event_cpu.c ARM: perf: handle armpmu_register failing 2013-01-18 13:46:09 +00:00
perf_event_v6.c ARM: perf: don't pretend to support counting of L1I writes 2013-01-16 12:01:59 +00:00
perf_event_v7.c ARM: 7663/1: perf: fix ARMv7 EVTYPE_MASK to include NSH bit 2013-03-03 22:54:17 +00:00
perf_event_xscale.c ARM: perf: don't pretend to support counting of L1I writes 2013-01-16 12:01:59 +00:00
perf_event.c ARM: 7698/1: perf: fix group validation when using enable_on_exec 2013-04-17 16:54:07 +01:00
pj4-cp0.c arm: remove several unnecessary module.h include instances 2011-10-31 19:30:48 -04:00
process.c Merge branch 'for-linus' of git://git.linaro.org/people/rmk/linux-arm 2013-05-03 09:13:19 -07:00
psci_smp.c arm: introduce psci_smp_ops 2013-05-21 14:24:11 +00:00
psci.c arm: introduce psci_smp_ops 2013-05-21 14:24:11 +00:00
ptrace.c ARM: 7595/1: syscall: rework ordering in syscall_trace_exit 2012-12-11 00:18:26 +00:00
relocate_kernel.S ARM: 7065/1: kexec: ensure new kernel is entered in ARM state 2011-08-28 10:39:41 +01:00
return_address.c ARM: 7676/1: fix a wrong value returned from CALLER_ADDRn 2013-03-19 11:43:46 +00:00
sched_clock.c ARM: arm-soc: late cleanups 2013-05-07 11:22:14 -07:00
setup.c Merge tag '3.10-rc2-psci-ops-11-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/sstabellini/xen into devel-stable 2013-05-22 10:53:20 +01:00
signal.c ARM: mpu: protect the vectors page with an MPU region 2013-06-17 15:13:18 +01:00
signal.h ARM: 7471/1: Revert "7442/1: Revert "remove unused restart trampoline"" 2012-07-28 11:11:51 +01:00
sleep.S Disintegrate asm/system.h for ARM 2012-03-28 18:30:01 +01:00
smp_scu.c Merge branch 'for-next' of git://git.pengutronix.de/git/ukl/linux into devel-stable 2013-03-09 15:49:32 +00:00
smp_tlb.c ARM: 7703/1: Disable preemption in broadcast_tlb*_a15_erratum() 2013-04-25 13:15:15 +01:00
smp_twd.c ARM: smp_twd: convert to use CLKSRC_OF init 2013-03-11 08:42:08 -05:00
smp.c ARM: mpu: add MPU initialisation for secondary cores 2013-06-07 17:02:53 +01:00
stacktrace.c arm: convert core files from module.h to export.h 2011-10-31 19:30:49 -04:00
suspend.c ARM: suspend: fix CPU suspend code for !CONFIG_MMU configurations 2013-06-07 17:02:44 +01:00
swp_emulate.c arm: single_open() leaks 2013-05-05 00:07:22 -04:00
sys_arm.c arm: switch to generic fork/vfork/clone 2012-11-28 22:13:54 -05:00
sys_oabi-compat.c userns: Convert stat to return values mapped from kuids and kgids 2012-05-15 14:08:35 -07:00
tcm.c ARM: 7694/1: ARM, TCM: initialize TCM in paging_init(), instead of setup_arch() 2013-04-17 16:53:24 +01:00
thumbee.c ARM: 7385/1: ThumbEE: Use cpuid macros to read ID_PFR0 for ThumbEE 2012-04-25 19:49:26 +01:00
time.c ARM: make machine_desc->init_time default to clocksource_of_init 2013-04-11 15:11:14 -05:00
topology.c arm: remove cast for kzalloc return value 2013-03-18 14:15:58 +01:00
traps.c Merge branch 'for-next' of git://git.pengutronix.de/git/ukl/linux into devel-stable 2013-05-22 10:52:24 +01:00
unwind.c ARM: unwinder: fix bisection to find origin in .idx section 2011-12-15 14:02:19 -08:00
vmlinux.lds.S ARM: KVM: enforce maximum size for identity mapped code 2013-04-28 22:23:09 -07:00
xscale-cp0.c arm: remove several unnecessary module.h include instances 2011-10-31 19:30:48 -04:00