]> git.ipfire.org Git - thirdparty/kernel/stable.git/commit
arm64: mm: add support for WXN memory translation attribute
authorArd Biesheuvel <ardb@kernel.org>
Wed, 14 Feb 2024 12:29:29 +0000 (13:29 +0100)
committerCatalin Marinas <catalin.marinas@arm.com>
Fri, 16 Feb 2024 12:42:43 +0000 (12:42 +0000)
commit50e3ed0f93f4f62ed2aa83de5db6cb84ecdd5707
tree3601a9698d536ddbc803a735133900153104487f
parentcb1a393c40eee2f1692c995ea0cc6e45bfccde4d
arm64: mm: add support for WXN memory translation attribute

The AArch64 virtual memory system supports a global WXN control, which
can be enabled to make all writable mappings implicitly no-exec. This is
a useful hardening feature, as it prevents mistakes in managing page
table permissions from being exploited to attack the system.

When enabled at EL1, the restrictions apply to both EL1 and EL0. EL1 is
completely under our control, and has been cleaned up to allow WXN to be
enabled from boot onwards. EL0 is not under our control, but given that
widely deployed security features such as selinux or PaX already limit
the ability of user space to create mappings that are writable and
executable at the same time, the impact of enabling this for EL0 is
expected to be limited. (For this reason, common user space libraries
that have a legitimate need for manipulating executable code already
carry fallbacks such as [0].)

If enabled at compile time, the feature can still be disabled at boot if
needed, by passing arm64.nowxn on the kernel command line.

[0] https://github.com/libffi/libffi/blob/master/src/closures.c#L440

Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Reviewed-by: Kees Cook <keescook@chromium.org>
Link: https://lore.kernel.org/r/20240214122845.2033971-88-ardb+git@google.com
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
arch/arm64/Kconfig
arch/arm64/include/asm/cpufeature.h
arch/arm64/include/asm/mman.h
arch/arm64/include/asm/mmu_context.h
arch/arm64/kernel/pi/idreg-override.c
arch/arm64/kernel/pi/map_kernel.c
arch/arm64/mm/proc.S