diff options
| -rw-r--r-- | arch/x86/mm/fault.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c index 9d591c895803..6dea040cc3a1 100644 --- a/arch/x86/mm/fault.c +++ b/arch/x86/mm/fault.c | |||
| @@ -1001,6 +1001,12 @@ static int fault_in_kernel_space(unsigned long address) | |||
| 1001 | 1001 | ||
| 1002 | static inline bool smap_violation(int error_code, struct pt_regs *regs) | 1002 | static inline bool smap_violation(int error_code, struct pt_regs *regs) |
| 1003 | { | 1003 | { |
| 1004 | if (!IS_ENABLED(CONFIG_X86_SMAP)) | ||
| 1005 | return false; | ||
| 1006 | |||
| 1007 | if (!static_cpu_has(X86_FEATURE_SMAP)) | ||
| 1008 | return false; | ||
| 1009 | |||
| 1004 | if (error_code & PF_USER) | 1010 | if (error_code & PF_USER) |
| 1005 | return false; | 1011 | return false; |
| 1006 | 1012 | ||
| @@ -1087,11 +1093,9 @@ __do_page_fault(struct pt_regs *regs, unsigned long error_code) | |||
| 1087 | if (unlikely(error_code & PF_RSVD)) | 1093 | if (unlikely(error_code & PF_RSVD)) |
| 1088 | pgtable_bad(regs, error_code, address); | 1094 | pgtable_bad(regs, error_code, address); |
| 1089 | 1095 | ||
| 1090 | if (static_cpu_has(X86_FEATURE_SMAP)) { | 1096 | if (unlikely(smap_violation(error_code, regs))) { |
| 1091 | if (unlikely(smap_violation(error_code, regs))) { | 1097 | bad_area_nosemaphore(regs, error_code, address); |
| 1092 | bad_area_nosemaphore(regs, error_code, address); | 1098 | return; |
| 1093 | return; | ||
| 1094 | } | ||
| 1095 | } | 1099 | } |
| 1096 | 1100 | ||
| 1097 | /* | 1101 | /* |
