]> xenbits.xensource.com Git - people/royger/xen.git/commitdiff
x86/32on64: don't allow recursive page tables from L3
authorJan Beulich <jbeulich@suse.com>
Thu, 8 Sep 2016 12:14:53 +0000 (14:14 +0200)
committerJan Beulich <jbeulich@suse.com>
Thu, 8 Sep 2016 12:14:53 +0000 (14:14 +0200)
L3 entries are special in PAE mode, and hence can't reasonably be used
for setting up recursive (and hence linear) page table mappings. Since
abuse is possible when the guest in fact gets run on 4-level page
tables, this needs to be excluded explicitly.

This is XSA-185 / CVE-2016-7092.

Reported-by: Jérémie Boutoille <jboutoille@ext.quarkslab.com>
Reported-by: "栾尚聪(好风)" <shangcong.lsc@alibaba-inc.com>
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
xen/arch/x86/mm.c

index 670998f7741abdff424ea5ac55c16d1767c4fea3..b9debcca0b8b53318267db9d1c5ce9ad744233f8 100644 (file)
@@ -1124,7 +1124,9 @@ get_page_from_l3e(
 
     rc = get_page_and_type_from_pagenr(
         l3e_get_pfn(l3e), PGT_l2_page_table, d, partial, 1);
-    if ( unlikely(rc == -EINVAL) && get_l3_linear_pagetable(l3e, pfn, d) )
+    if ( unlikely(rc == -EINVAL) &&
+         !is_pv_32bit_domain(d) &&
+         get_l3_linear_pagetable(l3e, pfn, d) )
         rc = 0;
 
     return rc;