powerpc/book3s64/kuap: Use Key 3 to implement KUAP with hash translation.
authorAneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
Fri, 27 Nov 2020 04:44:19 +0000 (10:14 +0530)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 3 Dec 2020 14:01:26 +0000 (01:01 +1100)
Radix use AMR Key 0 and hash translation use AMR key 3.

Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
Reviewed-by: Sandipan Das <sandipan@linux.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20201127044424.40686-18-aneesh.kumar@linux.ibm.com
arch/powerpc/include/asm/book3s/64/kup.h

index f8f87b5..b9cbb96 100644 (file)
@@ -5,11 +5,10 @@
 #include <linux/const.h>
 #include <asm/reg.h>
 
-#define AMR_KUAP_BLOCK_READ    UL(0x4000000000000000)
-#define AMR_KUAP_BLOCK_WRITE   UL(0x8000000000000000)
+#define AMR_KUAP_BLOCK_READ    UL(0x5455555555555555)
+#define AMR_KUAP_BLOCK_WRITE   UL(0xa8aaaaaaaaaaaaaa)
 #define AMR_KUEP_BLOCKED       (1UL << 62)
 #define AMR_KUAP_BLOCKED       (AMR_KUAP_BLOCK_READ | AMR_KUAP_BLOCK_WRITE)
-#define AMR_KUAP_SHIFT         62
 
 #ifdef __ASSEMBLY__
 
@@ -62,8 +61,8 @@
 #ifdef CONFIG_PPC_KUAP_DEBUG
        BEGIN_MMU_FTR_SECTION_NESTED(67)
        mfspr   \gpr1, SPRN_AMR
-       li      \gpr2, (AMR_KUAP_BLOCKED >> AMR_KUAP_SHIFT)
-       sldi    \gpr2, \gpr2, AMR_KUAP_SHIFT
+       /* Prevent access to userspace using any key values */
+       LOAD_REG_IMMEDIATE(\gpr2, AMR_KUAP_BLOCKED)
 999:   tdne    \gpr1, \gpr2
        EMIT_BUG_ENTRY 999b, __FILE__, __LINE__, (BUGFLAG_WARNING | BUGFLAG_ONCE)
        END_MMU_FTR_SECTION_NESTED_IFSET(MMU_FTR_BOOK3S_KUAP, 67)