linux/arch/powerpc/include/asm
Michael Ellerman 890274c2dc powerpc/64s: Implement KUAP for Radix MMU
Kernel Userspace Access Prevention utilises a feature of the Radix MMU
which disallows read and write access to userspace addresses. By
utilising this, the kernel is prevented from accessing user data from
outside of trusted paths that perform proper safety checks, such as
copy_{to/from}_user() and friends.

Userspace access is disabled from early boot and is only enabled when
performing an operation like copy_{to/from}_user(). The register that
controls this (AMR) does not prevent userspace from accessing itself,
so there is no need to save and restore when entering and exiting
userspace.

When entering the kernel from the kernel we save AMR and if it is not
blocking user access (because eg. we faulted doing a user access) we
reblock user access for the duration of the exception (ie. the page
fault) and then restore the AMR when returning back to the kernel.

This feature can be tested by using the lkdtm driver (CONFIG_LKDTM=y)
and performing the following:

  # (echo ACCESS_USERSPACE) > [debugfs]/provoke-crash/DIRECT

If enabled, this should send SIGSEGV to the thread.

We also add paranoid checking of AMR in switch and syscall return
under CONFIG_PPC_KUAP_DEBUG.

Co-authored-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Russell Currey <ruscur@russell.cc>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
2019-04-21 23:06:02 +10:00
..
book3s powerpc/64s: Implement KUAP for Radix MMU 2019-04-21 23:06:02 +10:00
nohash powerpc/mm: Silence unused-but-set-variable warnings 2019-04-20 22:02:26 +10:00
8xx_immap.h
accounting.h powerpc/time: Only set CONFIG_ARCH_HAS_SCALED_CPUTIME on PPC64 2018-10-20 13:26:47 +11:00
agp.h
archrandom.h
asm-405.h powerpc/405: move PPC405_ERR77 in asm-405.h 2018-07-30 22:48:13 +10:00
asm-compat.h powerpc: move ASM_CONST and stringify_in_c() into asm-const.h 2018-07-30 22:48:16 +10:00
asm-const.h powerpc: move ASM_CONST and stringify_in_c() into asm-const.h 2018-07-30 22:48:16 +10:00
asm-offsets.h
asm-prototypes.h powerpc/64s: Fix unrelocated interrupt trampoline address test 2019-03-02 00:25:47 +11:00
async_tx.h
atomic.h powerpc updates for 4.19 2018-08-17 11:32:50 -07:00
backlight.h
barrier.h powerpc/fsl: Add barrier_nospec implementation for NXP PowerPC Book3E 2018-08-08 00:32:24 +10:00
bitops.h powerpc/405: move PPC405_ERR77 in asm-405.h 2018-07-30 22:48:13 +10:00
bootx.h
btext.h
bug.h signal/powerpc: Specialize _exception_pkey for handling pkey exceptions 2018-09-21 15:52:43 +02:00
bugs.h
cache.h powerpc: change CONFIG_6xx to CONFIG_PPC_BOOK3S_32 2018-11-26 22:33:37 +11:00
cacheflush.h powerpc: remove unneeded inclusions of cpu_has_feature.h 2018-07-30 22:47:54 +10:00
cell-pmu.h
cell-regs.h
checksum.h powerpc: drop unused GENERIC_CSUM Kconfig item 2019-02-22 00:10:14 +11:00
cmpxchg.h powerpc: move ASM_CONST and stringify_in_c() into asm-const.h 2018-07-30 22:48:16 +10:00
code-patching-asm.h powerpc/asm: Add a patch_site macro & helpers for patching instructions 2018-08-08 00:32:25 +10:00
code-patching.h powerpc: add modify_instruction() and modify_instruction_site() 2018-12-19 18:56:32 +11:00
compat.h asm-generic: Move common compat types to asm-generic/compat.h 2018-08-29 15:42:20 +02:00
context_tracking.h
copro.h mm: convert return type of handle_mm_fault() caller to vm_fault_t 2018-08-17 16:20:28 -07:00
cpm1.h powerpc/sysdev: change CPM GPIO to platform_device 2018-01-20 23:29:02 -06:00
cpm2.h
cpm.h powerpc/sysdev: change CPM GPIO to platform_device 2018-01-20 23:29:02 -06:00
cpu_has_feature.h
cpufeature.h
cpuidle.h powernv/cpuidle: Use parsed device tree values for cpuidle_init 2018-07-31 19:56:44 +10:00
cputable.h powerpc/83xx: handle machine check caused by watchdog timer 2018-12-21 20:56:41 -06:00
cputhreads.h powerpc: Detect the presence of big-cores via "ibm, thread-groups" 2018-10-13 22:21:25 +11:00
cputime.h powerpc/time: Only set CONFIG_ARCH_HAS_SCALED_CPUTIME on PPC64 2018-10-20 13:26:47 +11:00
current.h
dbdma.h
dbell.h powerpc: clean inclusions of asm/feature-fixups.h 2018-07-30 22:48:17 +10:00
dcr-generic.h
dcr-mmio.h
dcr-native.h powerpc: clean the inclusion of stringify.h 2018-07-30 22:48:17 +10:00
dcr-regs.h
dcr.h
debug.h powerpc: declare set_breakpoint() static 2018-07-30 22:48:18 +10:00
debugfs.h
delay.h
device.h powerpc/dma: remove max_direct_dma_addr 2019-02-18 22:41:03 +11:00
disassemble.h
dma-direct.h powerpc/dma: remove get_dma_offset 2019-02-18 22:41:04 +11:00
dma-mapping.h powerpc/dma: trim the fat from <asm/dma-mapping.h> 2019-02-18 22:41:04 +11:00
dma.h
drmem.h powerpc/pseries/memory-hotplug: Only update DT once per memory DLPAR request 2018-09-19 22:08:12 +10:00
dt_cpu_ftrs.h powerpc: clean inclusions of asm/feature-fixups.h 2018-07-30 22:48:17 +10:00
edac.h
eeh_event.h powerpc/eeh: Add eeh_force_recover to debugfs 2019-02-22 00:10:15 +11:00
eeh.h powerpc/eeh: Allow disabling recovery 2019-02-22 00:10:14 +11:00
ehv_pic.h
elf.h
emergency-restart.h
emulated_ops.h
epapr_hcalls.h powerpc/epapr: Move register keyword at the beginning of declaration 2018-03-13 15:50:32 +11:00
error-injection.h powerpc: Add support for function error injection 2018-10-20 13:26:43 +11:00
exception-64e.h powerpc/64: Add macros for annotating the destination of rfid/hrfid 2018-01-10 03:07:30 +11:00
exception-64s.h powerpc/64s: Implement KUAP for Radix MMU 2019-04-21 23:06:02 +10:00
exec.h
extable.h
fadump.h powerpc/fadump: Do not allow hot-remove memory from fadump reserved area. 2018-12-21 11:32:49 +11:00
fb.h
feature-fixups.h powerpc/64s: Implement KUAP for Radix MMU 2019-04-21 23:06:02 +10:00
firmware.h powerpc/pseries: PAPR persistent memory support 2018-10-19 00:56:17 +11:00
fixmap.h powerpc: handover page flags with a pgprot_t parameter 2018-10-14 18:04:09 +11:00
floppy.h
fs_pd.h
fsl_85xx_cache_sram.h
fsl_gtm.h
fsl_hcalls.h
fsl_lbc.h
fsl_pamu_stash.h
fsl_pm.h
ftrace.h Merge branch 'fixes' into next 2018-06-03 20:32:02 +10:00
futex.h powerpc: Add a framework for Kernel Userspace Access Protection 2019-04-21 23:05:57 +10:00
grackle.h
hardirq.h powerpc updates for 4.18 2018-06-07 10:23:33 -07:00
head-64.h powerpc/64s: Drop unused loc parameter to MASKABLE_EXCEPTION macros 2018-08-07 21:49:38 +10:00
heathrow.h
highmem.h powerpc: remove unnecessary inclusion of asm/tlbflush.h 2018-07-30 22:48:20 +10:00
hmi.h KVM: PPC: Book3S HV: Improve handling of debug-trigger HMIs on POWER9 2018-01-18 15:31:25 +11:00
hugetlb.h powerpc/mm: remove unused variable 2018-12-19 18:56:32 +11:00
hvcall.h KVM: PPC: Book3S: Introduce new hcall H_COPY_TOFROM_GUEST to access quadrants 1 & 2 2018-12-17 11:33:50 +11:00
hvconsole.h
hvcserver.h
hvsi.h powerpc/hvsi: Fix spelling mistake: "lenght" should be "length" 2019-01-14 20:39:27 +11:00
hw_breakpoint.h powerpc updates for 4.19 2018-08-17 11:32:50 -07:00
hw_irq.h powerpc/64s: make PACA_IRQ_HARD_DIS track MSR[EE] closely 2018-07-24 22:03:14 +10:00
hydra.h
i8259.h
ibmebus.h
icswx.h
ide.h
ima.h
imc-pmu.h powerpc/perf: Unregister thread-imc if core-imc not supported 2018-06-03 20:43:37 +10:00
immap_cpm2.h
io_event_irq.h
io-defs.h
io-workarounds.h
io.h iomap: introduce io{read|write}64_{lo_hi|hi_lo} 2019-01-22 13:39:59 +01:00
iommu.h powerpc/dma: trim the fat from <asm/dma-mapping.h> 2019-02-18 22:41:04 +11:00
ipic.h powerpc/ipic: drop unused functions 2019-01-14 20:39:27 +11:00
irq_work.h powerpc: Add missing prototype for arch_irq_work_raise() 2018-03-13 15:50:37 +11:00
irq.h powerpc: regain entire stack space 2019-02-23 22:31:40 +11:00
irqflags.h powerpc/64: Rename soft_enabled to irq_soft_mask 2018-01-19 22:37:01 +11:00
isa-bridge.h
jump_label.h powerpc: move ASM_CONST and stringify_in_c() into asm-const.h 2018-07-30 22:48:16 +10:00
Kbuild kbuild: warn redundant generic-y 2019-03-17 12:56:31 +09:00
kdebug.h
kdump.h
kexec.h kexec_file,x86,powerpc: factor out kexec_file_ops functions 2018-04-13 17:10:27 -07:00
keylargo.h
kgdb.h powerpc/kgdb: add kgdb_arch_set/remove_breakpoint() 2018-10-20 13:26:47 +11:00
kmap_types.h
kprobes.h powerpc/kprobes: Don't call the ->break_handler() in powerpc kprobes code 2018-06-21 12:33:15 +02:00
kup.h powerpc/64s: Implement KUAP for Radix MMU 2019-04-21 23:06:02 +10:00
kvm_asm.h KVM: PPC: Book3S: Simplify external interrupt handling 2018-10-09 16:04:27 +11:00
kvm_book3s_32.h
kvm_book3s_64.h KVM: PPC: Book3S HV: Introduce kvmhv_update_nest_rmap_rc_list() 2018-12-21 14:39:35 +11:00
kvm_book3s_asm.h KVM: PPC: Book3S HV: Framework and hcall stubs for nested virtualization 2018-10-09 16:04:27 +11:00
kvm_book3s.h KVM: PPC: Book3S HV: Introduce kvmhv_update_nest_rmap_rc_list() 2018-12-21 14:39:35 +11:00
kvm_booke_hv_asm.h powerpc: clean inclusions of asm/feature-fixups.h 2018-07-30 22:48:17 +10:00
kvm_booke.h KVM: PPC: Use ccr field in pt_regs struct embedded in vcpu struct 2018-10-09 16:04:27 +11:00
kvm_fpu.h
kvm_host.h PPC KVM update for 5.1 2019-02-22 17:43:05 +01:00
kvm_para.h KVM: Introduce paravirtualization hints and KVM_HINTS_DEDICATED 2018-03-06 18:40:44 +01:00
kvm_ppc.h KVM: PPC: Fix compilation when KVM is not enabled 2019-02-27 09:14:44 +11:00
libata-portmap.h
linkage.h
livepatch.h powerpc: Activate CONFIG_THREAD_INFO_IN_TASK 2019-02-23 22:31:40 +11:00
local.h powerpc/64s: Implement local_t using irq soft masking 2018-01-19 22:37:04 +11:00
lppaca.h powerpc: Fix oops due to bad access of lppaca on bare metal 2018-04-03 21:50:07 +10:00
lv1call.h
machdep.h dma-mapping, powerpc: simplify the arch dma_set_mask override 2019-02-18 22:41:03 +11:00
macio.h
mc146818rtc.h
mce.h powerpc/pseries: hwpoison the pages upon hitting UE 2019-04-20 22:02:35 +10:00
mediabay.h
membarrier.h membarrier: Provide GLOBAL_EXPEDITED command 2018-02-05 21:34:31 +01:00
mm-arch-hooks.h
mman.h mm: Add address parameter to arch_validate_prot() 2018-03-18 07:38:47 -07:00
mmu_context.h powerpc/vfio/iommu/kvm: Do not pin device memory 2018-12-21 16:20:46 +11:00
mmu.h powerpc/64s: Implement KUAP for Radix MMU 2019-04-21 23:06:02 +10:00
mmzone.h
module.h powerpc/kbuild: move -mprofile-kernel check to Kconfig 2018-06-11 09:16:29 +09:00
mpc5xxx.h
mpc6xx.h
mpc52xx_psc.h
mpc52xx.h powerpc/52xx: Add missing functions prototypes 2018-05-25 12:04:42 +10:00
mpc85xx.h
mpc5121.h
mpc8260.h
mpic_msgr.h
mpic_timer.h powerpc/mpic_timer: avoid struct timeval 2018-01-21 15:06:16 +11:00
mpic.h powerpc/msi: Fix compile error on mpc83xx 2018-10-21 19:32:07 +11:00
msi_bitmap.h
nmi.h powerpc/64s: Fix HV NMI vs HV interrupt recoverability test 2019-02-26 23:28:24 +11:00
nvram.h powerpc: Enable HAVE_ARCH_NVRAM_OPS and disable GENERIC_NVRAM 2019-01-22 10:21:45 +01:00
ohare.h
opal-api.h powerpc/powernv: Make possible for user to force a full ipl cec reboot 2018-10-03 15:39:45 +10:00
opal.h powerpc/powernv: Move opal_power_control_init() call in opal_init(). 2018-12-21 11:32:49 +11:00
oprofile_impl.h
paca.h powerpc/64s/hash: Add some SLB debugging tests 2018-10-14 18:04:09 +11:00
page_32.h powerpc/8xx: reintroduce 16K pages with HW assistance 2018-12-04 19:45:01 +11:00
page_64.h powerpc: move ASM_CONST and stringify_in_c() into asm-const.h 2018-07-30 22:48:16 +10:00
page.h powerpc/kconfig: define PAGE_SHIFT inside Kconfig 2019-02-23 21:04:32 +11:00
parport.h
pasemi_dma.h
pci-bridge.h powerpc updates for 5.1 2019-03-07 12:56:26 -08:00
pci.h powerpc/dma: remove get_pci_dma_ops 2019-02-18 22:41:03 +11:00
percpu.h
perf_event_fsl_emb.h
perf_event_server.h powerpc/perf: Add constraints for power9 l2/l3 bus events 2018-12-20 20:53:11 +11:00
perf_event.h powerpc/perf: Update perf_regs structure to include SIER 2018-12-20 20:53:11 +11:00
pgalloc.h
pgtable-be-types.h
pgtable-types.h powerpc/8xx: reintroduce 16K pages with HW assistance 2018-12-04 19:45:01 +11:00
pgtable.h powerpc/dma: use the dma-direct allocator for coherent platforms 2019-02-18 22:41:04 +11:00
pkeys.h powerpc/pkeys: make protection key 0 less special 2018-07-24 21:43:24 +10:00
plpar_wrappers.h powerpc/pseries: put cede MSR[EE] check under IRQ_SOFT_MASK_DEBUG 2018-06-03 20:40:25 +10:00
pmac_feature.h
pmac_low_i2c.h
pmac_pfunc.h powerpc/powermac: Move pmac_pfunc_base_install prototype to header file 2018-05-25 12:04:41 +10:00
pmc.h powerpc/64s: Do not allocate lppaca if we are not virtualized 2018-03-30 23:34:22 +11:00
pmi.h
pnv-ocxl.h ocxl: Rename pnv_ocxl_spa_remove_pe to clarify it's action 2018-06-03 20:40:32 +10:00
pnv-pci.h PCI: hotplug: Drop hotplug_slot_info 2018-09-18 17:52:15 -05:00
powernv.h powerpc/powernv: Don't reprogram SLW image on every KVM guest entry/exit 2019-02-22 00:10:15 +11:00
ppc4xx_ocm.h
ppc4xx.h
ppc_asm.h powerpc/fsl: Add macro to flush the branch predictor 2018-12-20 22:58:57 +11:00
ppc-opcode.h Merge git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf 2019-03-16 12:20:08 -07:00
ppc-pci.h powerpc/eeh: Improve recovery of passed-through devices 2019-02-05 11:55:44 +11:00
probes.h
processor.h powerpc: regain entire stack space 2019-02-23 22:31:40 +11:00
prom.h pseries/drc-info: Search DRC properties for CPU indexes 2018-01-21 16:21:46 +11:00
ps3.h
ps3av.h
ps3gpu.h
ps3stor.h
pte-walk.h
ptrace.h powerpc: Add a framework for Kernel Userspace Access Protection 2019-04-21 23:05:57 +10:00
reg_8xx.h powerpc/8xx: Remove CPU6 ERRATA Workaround 2018-01-16 23:47:12 +11:00
reg_a2.h powerpc: move ASM_CONST and stringify_in_c() into asm-const.h 2018-07-30 22:48:16 +10:00
reg_booke.h
reg_fsl_emb.h powerpc: clean the inclusion of stringify.h 2018-07-30 22:48:17 +10:00
reg.h powerpc: Update comments in preparation for THREAD_INFO_IN_TASK 2019-02-23 22:31:40 +11:00
rheap.h powerpc: Add missing prototype 2018-05-25 12:04:43 +10:00
rio.h
rtas.h powerpc/pseries: add missing cpumask.h include file 2018-10-26 21:58:58 +11:00
runlatch.h
scom.h
seccomp.h
sections.h powerpc/64s: Fix unrelocated interrupt trampoline address test 2019-03-02 00:25:47 +11:00
security_features.h powerpc/64s: Add support for software count cache flush 2018-08-08 00:32:26 +10:00
serial.h
setjmp.h
setup.h powerpc/fsl: Add nospectre_v2 command line argument 2018-12-20 22:59:03 +11:00
sfp-machine.h powerpc/math-emu: Update macros from GCC 2018-12-04 19:45:01 +11:00
shmparam.h
signal.h
slice.h powerpc/mm: define an empty slice_init_new_context_exec() 2018-12-19 18:56:32 +11:00
smp.h powerpc: Activate CONFIG_THREAD_INFO_IN_TASK 2019-02-23 22:31:40 +11:00
smu.h
sparsemem.h powerpc/mm: move warning from resize_hpt_for_hotplug() 2019-04-20 22:02:26 +10:00
spinlock_types.h
spinlock.h powerpc: move ASM_CONST and stringify_in_c() into asm-const.h 2018-07-30 22:48:16 +10:00
spu_csa.h
spu_info.h
spu_priv1.h
spu.h
sstep.h powerpc/sstep: Introduce GETTYPE macro 2018-06-03 21:19:40 +10:00
stackprotector.h powerpc/64: add stack protector support 2018-10-03 15:40:03 +10:00
stacktrace.h powerpc: Add show_user_instructions() 2018-08-08 00:32:30 +10:00
string.h powerpc/lib: Implement strlen() in assembly for PPC32 2018-08-07 21:49:30 +10:00
swab.h
swiotlb.h powerpc/dma: use the generic direct mapping bypass 2019-02-18 22:41:04 +11:00
switch_to.h powerpc: use task_pid_nr() for TID allocation 2018-06-03 20:40:31 +10:00
synch.h powerpc: clean the inclusion of stringify.h 2018-07-30 22:48:17 +10:00
syscall.h powerpc: split compat syscall table out from native table 2018-12-21 14:46:50 +11:00
syscalls.h powerpc/syscalls: switch rtas(2) to SYSCALL_DEFINE 2018-05-10 23:25:14 +10:00
task_size_32.h powerpc: Avoid circular header inclusion in mmu-hash.h 2019-02-23 22:31:39 +11:00
task_size_64.h powerpc: Avoid circular header inclusion in mmu-hash.h 2019-02-23 22:31:39 +11:00
tce.h
termios.h
thread_info.h powerpc/64: Replace CURRENT_THREAD_INFO with PACA_THREAD_INFO 2019-02-23 22:31:40 +11:00
time.h powerpc: change CONFIG_6xx to CONFIG_PPC_BOOK3S_32 2018-11-26 22:33:37 +11:00
timex.h
tlb.h powerpc: change CONFIG_PPC_STD_MMU_32 to CONFIG_PPC_BOOK3S_32 2018-11-26 22:33:37 +11:00
tlbflush.h powerpc: split asm/tlbflush.h 2018-07-30 22:48:21 +10:00
tm.h powerpc: Export tm_enable()/tm_disable/tm_abort() APIs 2018-05-24 16:04:02 +10:00
topology.h powerpc/pseries: Perform full re-add of CPU for topology update post-migration 2019-01-30 23:28:56 +11:00
trace_clock.h
trace.h powerpc/mm: Trace tlbia instruction 2018-10-20 13:26:47 +11:00
tsi108_irq.h
tsi108_pci.h
tsi108.h
types.h
uaccess.h powerpc: Add a framework for Kernel Userspace Access Protection 2019-04-21 23:05:57 +10:00
udbg.h
uic.h
unaligned.h
uninorth.h
unistd.h y2038: rename old time and utime syscalls 2019-02-07 00:13:28 +01:00
uprobes.h
user.h powerpc/aout: Fix struct user definition to use user_pt_regs 2018-10-19 15:09:04 +11:00
vas.h
vdso_datapage.h powerpc/vdso64: Fix CLOCK_MONOTONIC inconsistencies across Y2038 2019-03-18 19:26:38 +11:00
vdso.h
vga.h
vio.h
word-at-a-time.h
xics.h
xilinx_intc.h
xilinx_pci.h
xive-regs.h powerpc/xive: Remove (almost) unused macros 2018-06-03 20:43:35 +10:00
xive.h powerpc/xive: Remove xive_kexec_teardown_cpu() 2018-08-07 21:49:28 +10:00
xmon.h powerpc/xmon: Add __printf annotation to xmon_printf() 2018-05-25 12:04:36 +10:00
xor_altivec.h powerpc/altivec: Add missing prototypes for altivec 2018-05-25 12:04:38 +10:00
xor.h powerpc/altivec: Add missing prototypes for altivec 2018-05-25 12:04:38 +10:00