[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [linux-2.6.18-xen] ix86: don't subvert setting NX during 1:1 mapping setup
# HG changeset patch # User Jan Beulich <jbeulich@xxxxxxxx> # Date 1456150644 -3600 # Mon Feb 22 15:17:24 2016 +0100 # Node ID c13c5210b623867c1ac88b14183a051152b1febd # Parent a2856e4ff93b7a8e70c1b2334375ac76d29e01d8 ix86: don't subvert setting NX during 1:1 mapping setup Since the hypervisor or tool stack don't set that flag upon domain creation, we shouldn't blindly skip present page table entries. Instead, if NX is supported/enabled, we need to re-write them with the flag set. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> --- diff -r a2856e4ff93b -r c13c5210b623 arch/i386/mm/init-xen.c --- a/arch/i386/mm/init-xen.c Thu Dec 17 15:42:36 2015 +0100 +++ b/arch/i386/mm/init-xen.c Mon Feb 22 15:17:24 2016 +0100 @@ -204,12 +204,22 @@ static void __init kernel_physical_mappi pte += pte_ofs; for (; pte_ofs < PTRS_PER_PTE && pfn < max_low_pfn; pte++, pfn++, pte_ofs++) { /* XEN: Only map initial RAM allocation. */ - if ((pfn >= max_ram_pfn) || pte_present(*pte)) + if (pfn >= max_ram_pfn) continue; - if (is_kernel_text(address)) + if (is_kernel_text(address)) { + if (pte_present(*pte)) + continue; set_pte(pte, pfn_pte(pfn, PAGE_KERNEL_EXEC)); - else - set_pte(pte, pfn_pte(pfn, PAGE_KERNEL)); + } else if (pte_present(*pte) && + !(__supported_pte_mask & _PAGE_NX)) + continue; + else { + pgprot_t prot = PAGE_KERNEL; + + if (pte_present(*pte) && !pte_write(*pte)) + pgprot_val(prot) &= ~_PAGE_RW; + set_pte(pte, pfn_pte(pfn, prot)); + } } pte_ofs = 0; } _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |