|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] x86/mm/p2m-pt: Clip mfn to allowable width when building a PTE
# HG changeset patch
# User Tim Deegan <tim@xxxxxxx>
# Date 1333016964 -3600
# Node ID 6be5875ce735c581769febadf94d38f9853b3fa8
# Parent 74d2af0b56ea7e6072bdfd6e493be5f108808bb7
x86/mm/p2m-pt: Clip mfn to allowable width when building a PTE
Otherwise, INVALID_MFN tramples over high order bits used for additional flags.
Signed-off-by: Andres Lagar-Cavilla <andres@xxxxxxxxxxxxxxxx>
Acked-by: Tim Deegan <tim@xxxxxxx>
Committed-by: Tim Deegan <tim@xxxxxxx>
---
diff -r 74d2af0b56ea -r 6be5875ce735 xen/arch/x86/mm/p2m-pt.c
--- a/xen/arch/x86/mm/p2m-pt.c Wed Mar 28 16:59:02 2012 +0200
+++ b/xen/arch/x86/mm/p2m-pt.c Thu Mar 29 11:29:24 2012 +0100
@@ -48,6 +48,13 @@
#undef page_to_mfn
#define page_to_mfn(_pg) _mfn(__page_to_mfn(_pg))
+/* We may store INVALID_MFN in l1 PTEs. We need to clip this
+ * to avoid trampling over higher-order bits (NX, p2m type, IOMMU flags). We
+ * seem to not need to unclip on the return path, as callers are concerned only
+ * with p2m type in such cases.
+ */
+#define p2m_l1e_from_pfn(pfn, flags) \
+ l1e_from_pfn((pfn) & (PADDR_MASK >> PAGE_SHIFT), (flags))
/* PTE flags for the various types of p2m entry */
#define P2M_BASE_FLAGS \
@@ -385,8 +392,8 @@ p2m_set_entry(struct p2m_domain *p2m, un
ASSERT(p2m_entry);
if ( mfn_valid(mfn) || (p2mt == p2m_mmio_direct) )
- entry_content = l1e_from_pfn(mfn_x(mfn),
- p2m_type_to_flags(p2mt, mfn));
+ entry_content = p2m_l1e_from_pfn(mfn_x(mfn),
+ p2m_type_to_flags(p2mt, mfn));
else
entry_content = l1e_empty();
@@ -923,7 +930,7 @@ static void p2m_change_type_global(struc
* L2_PAGETABLE_ENTRIES) * L1_PAGETABLE_ENTRIES;
/* create a new 1le entry with the new type */
flags = p2m_type_to_flags(nt, _mfn(mfn));
- l1e_content = l1e_from_pfn(mfn, flags);
+ l1e_content = p2m_l1e_from_pfn(mfn, flags);
p2m->write_p2m_entry(p2m, gfn, &l1e[i1],
l1mfn, l1e_content, 1);
}
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |