linux/arch/powerpc/platforms
Christophe Leroy a68c31fc01 powerpc/32s: Implement Kernel Userspace Access Protection
This patch implements Kernel Userspace Access Protection for
book3s/32.

Due to limitations of the processor page protection capabilities,
the protection is only against writing. read protection cannot be
achieved using page protection.

The previous patch modifies the page protection so that RW user
pages are RW for Key 0 and RO for Key 1, and it sets Key 0 for
both user and kernel.

This patch changes userspace segment registers are set to Ku 0
and Ks 1. When kernel needs to write to RW pages, the associated
segment register is then changed to Ks 0 in order to allow write
access to the kernel.

In order to avoid having the read all segment registers when
locking/unlocking the access, some data is kept in the thread_struct
and saved on stack on exceptions. The field identifies both the
first unlocked segment and the first segment following the last
unlocked one. When no segment is unlocked, it contains value 0.

As the hash_page() function is not able to easily determine if a
protfault is due to a bad kernel access to userspace, protfaults
need to be handled by handle_page_fault when KUAP is set.

Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
[mpe: Drop allow_read/write_to/from_user() as they're now in kup.h,
      and adapt allow_user_access() to do nothing when to == NULL]
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
2019-04-21 23:11:47 +10:00
..
4xx powerpc/4xx/ocm: Fix fix for phys_addr_t printf warnings 2019-01-11 23:57:20 +11:00
8xx powerpc/8xx: Fix possible device node reference leak 2019-04-20 22:02:35 +10:00
40x PCI: consolidate PCI config entry in drivers/pci 2018-11-23 11:45:34 +09:00
44x powerpc/44x: Force PCI on for CURRITUCK 2019-02-22 00:10:15 +11:00
52xx Kconfig file consolidation for v4.21 2018-12-29 13:40:29 -08:00
82xx powerpc/kconfig: remove CONFIG_6xx 2018-11-26 22:33:37 +11:00
83xx powerpc/83xx: Add missing of_node_put() after of_device_is_available() 2019-04-20 22:02:27 +10:00
85xx powerpc/dma: trim the fat from <asm/dma-mapping.h> 2019-02-18 22:41:04 +11:00
86xx powerpc/dma: use the generic direct mapping bypass 2019-02-18 22:41:04 +11:00
512x Kconfig file consolidation for v4.21 2018-12-29 13:40:29 -08:00
amigaone Kconfig file consolidation for v4.21 2018-12-29 13:40:29 -08:00
cell powerpc: remove nargs from __SYSCALL 2019-03-02 14:43:05 +11:00
chrp Merge 5.0-rc4 into char-misc-next 2019-01-28 08:13:52 +01:00
embedded6xx powerpc/embedded6xx: Remove unused functions holly_power_off and holly_halt 2019-04-20 22:02:12 +10:00
maple Kconfig file consolidation for v4.21 2018-12-29 13:40:29 -08:00
pasemi treewide: add checks for the return value of memblock_alloc*() 2019-03-12 10:04:02 -07:00
powermac treewide: add checks for the return value of memblock_alloc*() 2019-03-12 10:04:02 -07:00
powernv powerpc/powernv: Squash sparse warnings in opal-call.c 2019-04-20 22:03:19 +10:00
ps3 treewide: add checks for the return value of memblock_alloc*() 2019-03-12 10:04:02 -07:00
pseries powerpc/pseries: hwpoison the pages upon hitting UE 2019-04-20 22:02:35 +10:00
fsl_uli1575.c
Kconfig Kconfig file consolidation for v4.21 2018-12-29 13:40:29 -08:00
Kconfig.cputype powerpc/32s: Implement Kernel Userspace Access Protection 2019-04-21 23:11:47 +10:00
Makefile powerpc: Add -Werror at arch/powerpc level 2018-10-19 00:56:17 +11:00