]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/xen.git/commitdiff
x86: constrain MFN range Dom0 may access
authorJan Beulich <jbeulich@suse.com>
Thu, 21 Jan 2016 15:10:42 +0000 (16:10 +0100)
committerJan Beulich <jbeulich@suse.com>
Thu, 21 Jan 2016 15:10:42 +0000 (16:10 +0100)
... to that covered by the physical address width supported by the
processor. This implicitly avoids Dom0 (accidentally or due to some
kind of abuse) passing out of range addresses to a guest, which in
turn eliminates this only possibility for PV guests to create PTEs
with one or more reserved bits set.

Note that this is not a security issue due to XSA-77.

Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
xen/arch/x86/domain_build.c
xen/arch/x86/mm.c

index d02dc4bfbf2d4fe43bb936c37e44dd087cc10c9a..cb287f0698eb7cee9401d5643cf20de223079965 100644 (file)
@@ -1533,7 +1533,7 @@ int __init construct_dom0(
 
     /* The hardware domain is initially permitted full I/O capabilities. */
     rc |= ioports_permit_access(d, 0, 0xFFFF);
-    rc |= iomem_permit_access(d, 0UL, ~0UL);
+    rc |= iomem_permit_access(d, 0UL, (1UL << (paddr_bits - PAGE_SHIFT)) - 1);
     rc |= irqs_permit_access(d, 1, nr_irqs_gsi - 1);
 
     /*
index fcf6577dbbf60531e4207afd3c9eed9ef2dd1697..83f82b87be92ebc4ccf537053df40208a8f055d5 100644 (file)
@@ -4604,7 +4604,7 @@ struct memory_map_context
 static int _handle_iomem_range(unsigned long s, unsigned long e,
                                struct memory_map_context *ctxt)
 {
-    if ( s > ctxt->s )
+    if ( s > ctxt->s && !(s >> (paddr_bits - PAGE_SHIFT)) )
     {
         e820entry_t ent;
         XEN_GUEST_HANDLE_PARAM(e820entry_t) buffer_param;