|
@@ -508,18 +508,13 @@ static int split_large_page(pte_t *kpte, unsigned long address)
|
|
|
#endif
|
|
|
|
|
|
/*
|
|
|
- * Install the new, split up pagetable. Important details here:
|
|
|
+ * Install the new, split up pagetable.
|
|
|
*
|
|
|
- * On Intel the NX bit of all levels must be cleared to make a
|
|
|
- * page executable. See section 4.13.2 of Intel 64 and IA-32
|
|
|
- * Architectures Software Developer's Manual).
|
|
|
- *
|
|
|
- * Mark the entry present. The current mapping might be
|
|
|
- * set to not present, which we preserved above.
|
|
|
+ * We use the standard kernel pagetable protections for the new
|
|
|
+ * pagetable protections, the actual ptes set above control the
|
|
|
+ * primary protection behavior:
|
|
|
*/
|
|
|
- ref_prot = pte_pgprot(pte_mkexec(pte_clrhuge(*kpte)));
|
|
|
- pgprot_val(ref_prot) |= _PAGE_PRESENT;
|
|
|
- __set_pmd_pte(kpte, address, mk_pte(base, ref_prot));
|
|
|
+ __set_pmd_pte(kpte, address, mk_pte(base, __pgprot(_KERNPG_TABLE)));
|
|
|
base = NULL;
|
|
|
|
|
|
out_unlock:
|