x86/traps: Define RMP violation #PF error code
authorBrijesh Singh <brijesh.singh@amd.com>
Fri, 26 Jan 2024 04:11:08 +0000 (22:11 -0600)
committerBorislav Petkov (AMD) <bp@alien8.de>
Mon, 29 Jan 2024 16:26:56 +0000 (17:26 +0100)
Bit 31 in the page fault-error bit will be set when processor encounters
an RMP violation.

While at it, use the BIT() macro.

Signed-off-by: Brijesh Singh <brijesh.singh@amd.com>
Signed-off-by: Michael Roth <michael.roth@amd.com>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Acked-by: Dave Hansen <dave.hansen@intel.com>
Link: https://lore.kernel.org/r/20240126041126.1927228-9-michael.roth@amd.com
arch/x86/include/asm/trap_pf.h
arch/x86/mm/fault.c

index afa524325e558d281e9be0feb1b91cd3a7a488bc..a23a7b707b64e17077a83eae8ae23e4f3cd24a5b 100644 (file)
@@ -2,6 +2,8 @@
 #ifndef _ASM_X86_TRAP_PF_H
 #define _ASM_X86_TRAP_PF_H
 
+#include <linux/bits.h>
+
 /*
  * Page fault error code bits:
  *
  *   bit 5 ==                          1: protection keys block access
  *   bit 6 ==                          1: shadow stack access fault
  *   bit 15 ==                         1: SGX MMU page-fault
+ *   bit 31 ==                         1: fault was due to RMP violation
  */
 enum x86_pf_error_code {
-       X86_PF_PROT     =               1 << 0,
-       X86_PF_WRITE    =               1 << 1,
-       X86_PF_USER     =               1 << 2,
-       X86_PF_RSVD     =               1 << 3,
-       X86_PF_INSTR    =               1 << 4,
-       X86_PF_PK       =               1 << 5,
-       X86_PF_SHSTK    =               1 << 6,
-       X86_PF_SGX      =               1 << 15,
+       X86_PF_PROT     =               BIT(0),
+       X86_PF_WRITE    =               BIT(1),
+       X86_PF_USER     =               BIT(2),
+       X86_PF_RSVD     =               BIT(3),
+       X86_PF_INSTR    =               BIT(4),
+       X86_PF_PK       =               BIT(5),
+       X86_PF_SHSTK    =               BIT(6),
+       X86_PF_SGX      =               BIT(15),
+       X86_PF_RMP      =               BIT(31),
 };
 
 #endif /* _ASM_X86_TRAP_PF_H */
index 679b09cfe241c72e7f85bd7bbd406d59a259bf2a..8805e2e20df6ee5b68855d7a1f36d576194d11ad 100644 (file)
@@ -547,6 +547,7 @@ show_fault_oops(struct pt_regs *regs, unsigned long error_code, unsigned long ad
                 !(error_code & X86_PF_PROT) ? "not-present page" :
                 (error_code & X86_PF_RSVD)  ? "reserved bit violation" :
                 (error_code & X86_PF_PK)    ? "protection keys violation" :
+                (error_code & X86_PF_RMP)   ? "RMP violation" :
                                               "permissions violation");
 
        if (!(error_code & X86_PF_USER) && user_mode(regs)) {