|
@@ -1037,12 +1037,6 @@ static int spurious_kernel_fault_check(unsigned long error_code, pte_t *pte)
|
|
|
|
|
|
if ((error_code & X86_PF_INSTR) && !pte_exec(*pte))
|
|
|
return 0;
|
|
|
- /*
|
|
|
- * Note: We do not do lazy flushing on protection key
|
|
|
- * changes, so no spurious fault will ever set X86_PF_PK.
|
|
|
- */
|
|
|
- if ((error_code & X86_PF_PK))
|
|
|
- return 1;
|
|
|
|
|
|
return 1;
|
|
|
}
|
|
@@ -1217,6 +1211,13 @@ static void
|
|
|
do_kern_addr_fault(struct pt_regs *regs, unsigned long hw_error_code,
|
|
|
unsigned long address)
|
|
|
{
|
|
|
+ /*
|
|
|
+ * Protection keys exceptions only happen on user pages. We
|
|
|
+ * have no user pages in the kernel portion of the address
|
|
|
+ * space, so do not expect them here.
|
|
|
+ */
|
|
|
+ WARN_ON_ONCE(hw_error_code & X86_PF_PK);
|
|
|
+
|
|
|
/*
|
|
|
* We can fault-in kernel-space virtual memory on-demand. The
|
|
|
* 'reference' page table is init_mm.pgd.
|