[PATCH v4 00/29] arm64: Permission Overlay Extension
Joey Gouly
joey.gouly at arm.com
Tue May 28 21:30:07 AEST 2024
On Fri, May 03, 2024 at 02:01:18PM +0100, Joey Gouly wrote:
> Hi all,
>
> This series implements the Permission Overlay Extension introduced in 2022
> VMSA enhancements [1]. It is based on v6.9-rc5.
>
> One possible issue with this version, I took the last bit of HWCAP2.
>
> Changes since v3[2]:
> - Moved Kconfig to nearer the end of the series
> - Reworked MMU Fault path, to check for POE faults earlier, under the mm lock
> - Rework VM_FLAGS to use Kconfig option
> - Don't check POR_EL0 in MTE sync tags function
> - Reworked KVM to fit into VNCR/VM configuration changes
> - Use new AT instruction in KVM
> - Rebase onto v6.9-rc5
>
> The Permission Overlay Extension allows to constrain permissions on memory
> regions. This can be used from userspace (EL0) without a system call or TLB
> invalidation.
>
> POE is used to implement the Memory Protection Keys [3] Linux syscall.
>
> The first few patches add the basic framework, then the PKEYS interface is
> implemented, and then the selftests are made to work on arm64.
>
> I have tested the modified protection_keys test on x86_64, but not PPC.
> I haven't build tested the x86/ppc arch changes.
>
> Thanks,
> Joey
I found a silly off by one error, so I will be sending a v5 at some point.
>
> Joey Gouly (29):
> powerpc/mm: add ARCH_PKEY_BITS to Kconfig
> x86/mm: add ARCH_PKEY_BITS to Kconfig
> mm: use ARCH_PKEY_BITS to define VM_PKEY_BITN
> arm64: disable trapping of POR_EL0 to EL2
> arm64: cpufeature: add Permission Overlay Extension cpucap
> arm64: context switch POR_EL0 register
> KVM: arm64: Save/restore POE registers
> KVM: arm64: make kvm_at() take an OP_AT_*
> KVM: arm64: use `at s1e1a` for POE
> arm64: enable the Permission Overlay Extension for EL0
> arm64: re-order MTE VM_ flags
> arm64: add POIndex defines
> arm64: convert protection key into vm_flags and pgprot values
> arm64: mask out POIndex when modifying a PTE
> arm64: handle PKEY/POE faults
> arm64: add pte_access_permitted_no_overlay()
> arm64: implement PKEYS support
> arm64: add POE signal support
> arm64: enable PKEY support for CPUs with S1POE
> arm64: enable POE and PIE to coexist
> arm64/ptrace: add support for FEAT_POE
> arm64: add Permission Overlay Extension Kconfig
> kselftest/arm64: move get_header()
> selftests: mm: move fpregs printing
> selftests: mm: make protection_keys test work on arm64
> kselftest/arm64: add HWCAP test for FEAT_S1POE
> kselftest/arm64: parse POE_MAGIC in a signal frame
> kselftest/arm64: Add test case for POR_EL0 signal frame records
> KVM: selftests: get-reg-list: add Permission Overlay registers
>
> Documentation/arch/arm64/elf_hwcaps.rst | 2 +
> arch/arm64/Kconfig | 22 +++
> arch/arm64/include/asm/cpufeature.h | 6 +
> arch/arm64/include/asm/el2_setup.h | 10 +-
> arch/arm64/include/asm/hwcap.h | 1 +
> arch/arm64/include/asm/kvm_asm.h | 3 +-
> arch/arm64/include/asm/kvm_host.h | 4 +
> arch/arm64/include/asm/mman.h | 8 +-
> arch/arm64/include/asm/mmu.h | 1 +
> arch/arm64/include/asm/mmu_context.h | 51 ++++++-
> arch/arm64/include/asm/pgtable-hwdef.h | 10 ++
> arch/arm64/include/asm/pgtable-prot.h | 8 +-
> arch/arm64/include/asm/pgtable.h | 34 ++++-
> arch/arm64/include/asm/pkeys.h | 110 ++++++++++++++
> arch/arm64/include/asm/por.h | 33 +++++
> arch/arm64/include/asm/processor.h | 1 +
> arch/arm64/include/asm/sysreg.h | 3 +
> arch/arm64/include/asm/traps.h | 1 +
> arch/arm64/include/asm/vncr_mapping.h | 1 +
> arch/arm64/include/uapi/asm/hwcap.h | 1 +
> arch/arm64/include/uapi/asm/sigcontext.h | 7 +
> arch/arm64/kernel/cpufeature.c | 23 +++
> arch/arm64/kernel/cpuinfo.c | 1 +
> arch/arm64/kernel/process.c | 28 ++++
> arch/arm64/kernel/ptrace.c | 46 ++++++
> arch/arm64/kernel/signal.c | 52 +++++++
> arch/arm64/kernel/traps.c | 12 +-
> arch/arm64/kvm/hyp/include/hyp/fault.h | 5 +-
> arch/arm64/kvm/hyp/include/hyp/sysreg-sr.h | 29 ++++
> arch/arm64/kvm/sys_regs.c | 8 +-
> arch/arm64/mm/fault.c | 56 ++++++-
> arch/arm64/mm/mmap.c | 9 ++
> arch/arm64/mm/mmu.c | 40 +++++
> arch/arm64/tools/cpucaps | 1 +
> arch/powerpc/Kconfig | 4 +
> arch/x86/Kconfig | 4 +
> fs/proc/task_mmu.c | 2 +
> include/linux/mm.h | 20 ++-
> include/uapi/linux/elf.h | 1 +
> tools/testing/selftests/arm64/abi/hwcap.c | 14 ++
> .../testing/selftests/arm64/signal/.gitignore | 1 +
> .../arm64/signal/testcases/poe_siginfo.c | 86 +++++++++++
> .../arm64/signal/testcases/testcases.c | 27 +---
> .../arm64/signal/testcases/testcases.h | 28 +++-
> .../selftests/kvm/aarch64/get-reg-list.c | 14 ++
> tools/testing/selftests/mm/Makefile | 2 +-
> tools/testing/selftests/mm/pkey-arm64.h | 139 ++++++++++++++++++
> tools/testing/selftests/mm/pkey-helpers.h | 8 +
> tools/testing/selftests/mm/pkey-powerpc.h | 3 +
> tools/testing/selftests/mm/pkey-x86.h | 4 +
> tools/testing/selftests/mm/protection_keys.c | 109 ++++++++++++--
> 51 files changed, 1027 insertions(+), 66 deletions(-)
> create mode 100644 arch/arm64/include/asm/pkeys.h
> create mode 100644 arch/arm64/include/asm/por.h
> create mode 100644 tools/testing/selftests/arm64/signal/testcases/poe_siginfo.c
> create mode 100644 tools/testing/selftests/mm/pkey-arm64.h
>
> --
> 2.25.1
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
More information about the Linuxppc-dev
mailing list