summaryrefslogtreecommitdiff
path: root/arch/arm64/mm
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2022-03-09 12:59:21 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2022-03-09 12:59:21 -0800
commite7e19defa57580d679bf0d03f8a34933008a7930 (patch)
tree83e2c9dfcc7567832a4851e60e6f50f5985719d9 /arch/arm64/mm
parent33970b031dc4653cc9dc80f2886976706c4c8ef1 (diff)
parentb859ebedd1e730bbda69142fca87af4e712649a1 (diff)
downloadlinux-e7e19defa57580d679bf0d03f8a34933008a7930.tar.gz
linux-e7e19defa57580d679bf0d03f8a34933008a7930.tar.bz2
linux-e7e19defa57580d679bf0d03f8a34933008a7930.zip
Merge tag 'arm64-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux
Pull arm64 fixes from Catalin Marinas: - Fix compilation of eBPF object files that indirectly include mte-kasan.h. - Fix test for execute-only permissions with EPAN (Enhanced Privileged Access Never, ARMv8.7 feature). * tag 'arm64-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux: arm64: kasan: fix include error in MTE functions arm64: Ensure execute-only permissions are not allowed without EPAN
Diffstat (limited to 'arch/arm64/mm')
-rw-r--r--arch/arm64/mm/mmap.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/arch/arm64/mm/mmap.c b/arch/arm64/mm/mmap.c
index a38f54cd638c..77ada00280d9 100644
--- a/arch/arm64/mm/mmap.c
+++ b/arch/arm64/mm/mmap.c
@@ -7,8 +7,10 @@
#include <linux/io.h>
#include <linux/memblock.h>
+#include <linux/mm.h>
#include <linux/types.h>
+#include <asm/cpufeature.h>
#include <asm/page.h>
/*
@@ -38,3 +40,18 @@ int valid_mmap_phys_addr_range(unsigned long pfn, size_t size)
{
return !(((pfn << PAGE_SHIFT) + size) & ~PHYS_MASK);
}
+
+static int __init adjust_protection_map(void)
+{
+ /*
+ * With Enhanced PAN we can honour the execute-only permissions as
+ * there is no PAN override with such mappings.
+ */
+ if (cpus_have_const_cap(ARM64_HAS_EPAN)) {
+ protection_map[VM_EXEC] = PAGE_EXECONLY;
+ protection_map[VM_EXEC | VM_SHARED] = PAGE_EXECONLY;
+ }
+
+ return 0;
+}
+arch_initcall(adjust_protection_map);