powerpc/book3s64/kuep: Move KUEP related function outside radix
authorAneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
Fri, 27 Nov 2020 04:44:08 +0000 (10:14 +0530)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 3 Dec 2020 14:01:24 +0000 (01:01 +1100)
The next set of patches adds support for kuep with hash translation.
In preparation for that rename/move kuap related functions to
non radix names.

Also set MMU_FTR_KUEP and add the missing isync().

Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20201127044424.40686-7-aneesh.kumar@linux.ibm.com
arch/powerpc/include/asm/book3s/64/kup.h
arch/powerpc/mm/book3s64/pkeys.c
arch/powerpc/mm/book3s64/radix_pgtable.c

index 8735d2d..60d5355 100644 (file)
@@ -7,6 +7,7 @@
 
 #define AMR_KUAP_BLOCK_READ    UL(0x4000000000000000)
 #define AMR_KUAP_BLOCK_WRITE   UL(0x8000000000000000)
+#define AMR_KUEP_BLOCKED       (1UL << 62)
 #define AMR_KUAP_BLOCKED       (AMR_KUAP_BLOCK_READ | AMR_KUAP_BLOCK_WRITE)
 #define AMR_KUAP_SHIFT         62
 
index c75994c..82c722f 100644 (file)
@@ -229,6 +229,27 @@ out:
        return;
 }
 
+#ifdef CONFIG_PPC_KUEP
+void __init setup_kuep(bool disabled)
+{
+       if (disabled || !early_radix_enabled())
+               return;
+
+       if (smp_processor_id() == boot_cpuid) {
+               pr_info("Activating Kernel Userspace Execution Prevention\n");
+               cur_cpu_spec->mmu_features |= MMU_FTR_KUEP;
+       }
+
+       /*
+        * Radix always uses key0 of the IAMR to determine if an access is
+        * allowed. We set bit 0 (IBM bit 1) of key0, to prevent instruction
+        * fetch.
+        */
+       mtspr(SPRN_IAMR, AMR_KUEP_BLOCKED);
+       isync();
+}
+#endif
+
 #ifdef CONFIG_PPC_KUAP
 void __init setup_kuap(bool disabled)
 {
index fe2c26d..98f0b24 100644 (file)
@@ -589,26 +589,6 @@ static void radix_init_amor(void)
        mtspr(SPRN_AMOR, (3ul << 62));
 }
 
-#ifdef CONFIG_PPC_KUEP
-void setup_kuep(bool disabled)
-{
-       if (disabled || !early_radix_enabled())
-               return;
-
-       if (smp_processor_id() == boot_cpuid) {
-               pr_info("Activating Kernel Userspace Execution Prevention\n");
-               cur_cpu_spec->mmu_features |= MMU_FTR_KUEP;
-       }
-
-       /*
-        * Radix always uses key0 of the IAMR to determine if an access is
-        * allowed. We set bit 0 (IBM bit 1) of key0, to prevent instruction
-        * fetch.
-        */
-       mtspr(SPRN_IAMR, (1ul << 62));
-}
-#endif
-
 void __init radix__early_init_mmu(void)
 {
        unsigned long lpcr;