This patch series implements KUAP and KUEP with hash translation mode using memory keys. The kernel now uses memory protection key 3 to control access to the kernel. Kernel page table entries are now configured with key 3. Access to locations configured with any other key value is denied when in kernel mode (MSR_PR=0). This includes userspace which is by default configured with key 0.
Changes from V1: * Rebased on latest kernel * Depends on the below patch sets. https://lore.kernel.org/linuxppc-dev/20200429065654.1677541-1-npig...@gmail.com https://lore.kernel.org/linuxppc-dev/20200428123130.73078-1-...@ellerman.id.au https://lore.kernel.org/linuxppc-dev/20200502111347.541836-1-aneesh.ku...@linux.ibm.com Aneesh Kumar K.V (28): powerpc/book3s64/pkeys: Enable MMU_FTR_PKEY powerpc/book3s64/kuep: Add MMU_FTR_KUEP powerpc/book3s64/pkeys: Use execute_pkey_disable static key powerpc/book3s64/pkeys: Use MMU_FTR_PKEY instead of pkey_disabled static key powerpc/book3s64/kuap: Move KUAP related function outside radix powerpc/book3s64/kuep: Move KUEP related function outside radix powerpc/book3s64/kuap: Rename MMU_FTR_RADIX_KUAP to MMU_FTR_KUAP powerpc/book3s64/kuap/kuep: Make KUAP and KUEP a subfeature of PPC_MEM_KEYS powerpc/book3s64/kuap: Move UAMOR setup to key init function powerpc/book3s64/kuap: Use Key 3 for kernel mapping with hash translation powerpc/exec: Set thread.regs early during exec powerpc/book3s64/pkeys: Store/restore userspace AMR correctly on entry and exit from kernel powerpc/book3s64/kuep: Store/restore userspace IAMR correctly on entry and exit from kernel powerpc/book3s64/pkeys: Inherit correctly on fork. powerpc/book3s64/pkeys: Reset userspace AMR correctly on exec powerpc/ptrace-view: Use pt_regs values instead of thread_struct based one. powerpc/book3s64/pkeys: Don't update SPRN_AMR when in kernel mode. powerpc/book3s64/kuap: Restrict access to userspace based on userspace AMR powerpc/book3s64/kuap: Improve error reporting with KUAP powerpc/book3s64/kuap: Use Key 3 to implement KUAP with hash translation. powerpc/book3s64/kuep: Use Key 3 to implement KUEP with hash translation. powerpc/book3s64/hash/kuap: Enable kuap on hash powerpc/book3s64/hash/kuep: Enable KUEP on hash powerpc/book3s64/keys: Print information during boot. powerpc/selftest/ptrave-pkey: Rename variables to make it easier to follow code powerpc/selftest/ptrace-pkey: Update the test to mark an invalid pkey correctly powerpc/selftest/ptrace-pkey: IAMR and uamor cannot be updated by ptrace powerpc/book3s64/keys/kuap: Reset AMR/IAMR values on kexec arch/powerpc/include/asm/book3s/32/kup.h | 4 +- .../powerpc/include/asm/book3s/64/hash-pkey.h | 24 +- arch/powerpc/include/asm/book3s/64/hash.h | 3 +- .../powerpc/include/asm/book3s/64/kup-radix.h | 187 --------- arch/powerpc/include/asm/book3s/64/kup.h | 385 ++++++++++++++++++ arch/powerpc/include/asm/book3s/64/mmu-hash.h | 1 + arch/powerpc/include/asm/book3s/64/mmu.h | 6 + arch/powerpc/include/asm/book3s/64/pkeys.h | 2 +- arch/powerpc/include/asm/kup.h | 20 +- arch/powerpc/include/asm/mmu.h | 17 +- arch/powerpc/include/asm/mmu_context.h | 2 +- arch/powerpc/include/asm/nohash/32/kup-8xx.h | 4 +- arch/powerpc/include/asm/pkeys.h | 24 +- arch/powerpc/include/asm/processor.h | 5 - arch/powerpc/include/asm/ptrace.h | 6 +- arch/powerpc/kernel/asm-offsets.c | 4 + arch/powerpc/kernel/entry_64.S | 6 +- arch/powerpc/kernel/exceptions-64s.S | 4 +- arch/powerpc/kernel/misc_64.S | 14 - arch/powerpc/kernel/process.c | 54 ++- arch/powerpc/kernel/prom.c | 5 + arch/powerpc/kernel/ptrace/ptrace-view.c | 23 +- arch/powerpc/kernel/smp.c | 5 + arch/powerpc/kernel/syscall_64.c | 30 +- arch/powerpc/kernel/traps.c | 6 - arch/powerpc/kexec/core_64.c | 3 + arch/powerpc/mm/book3s64/hash_4k.c | 2 +- arch/powerpc/mm/book3s64/hash_64k.c | 4 +- arch/powerpc/mm/book3s64/hash_hugepage.c | 2 +- arch/powerpc/mm/book3s64/hash_hugetlbpage.c | 2 +- arch/powerpc/mm/book3s64/hash_pgtable.c | 2 +- arch/powerpc/mm/book3s64/hash_utils.c | 10 +- arch/powerpc/mm/book3s64/pgtable.c | 3 + arch/powerpc/mm/book3s64/pkeys.c | 221 +++++----- arch/powerpc/mm/book3s64/radix_pgtable.c | 36 -- arch/powerpc/mm/fault.c | 2 +- arch/powerpc/platforms/Kconfig.cputype | 4 +- .../selftests/powerpc/ptrace/ptrace-pkey.c | 53 +-- 38 files changed, 723 insertions(+), 462 deletions(-) delete mode 100644 arch/powerpc/include/asm/book3s/64/kup-radix.h create mode 100644 arch/powerpc/include/asm/book3s/64/kup.h -- 2.26.2