]> xenbits.xensource.com Git - legacy/linux-2.6.18-xen.git/commitdiff
xen/x86-64: kern_addr_valid() must not walk page tables mapping hypervisor space
authorKeir Fraser <keir.fraser@citrix.com>
Mon, 12 Apr 2010 16:34:34 +0000 (17:34 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Mon, 12 Apr 2010 16:34:34 +0000 (17:34 +0100)
Signed-off-by: Jan Beulich <jbeulich@novell.com>
arch/x86_64/mm/init-xen.c

index e0f78310b3736ad002ff412060d30546d5e04534..51a62ec4df354f681f1ac179e7ed305088f72559 100644 (file)
@@ -1149,6 +1149,19 @@ int kern_addr_valid(unsigned long addr)
        if (above != 0 && above != -1UL)
                return 0; 
        
+#ifdef CONFIG_XEN
+       /*
+        * Don't walk page tables for hypervisor addresses, but allow
+        * the M2P table to be accessed through e.g. /proc/kcore.
+        */
+       if (addr >= (unsigned long)machine_to_phys_mapping &&
+           addr < (unsigned long)(machine_to_phys_mapping +
+                                  (1UL << machine_to_phys_order)))
+               return 1;
+       if (addr >= HYPERVISOR_VIRT_START && addr < HYPERVISOR_VIRT_END)
+               return 0;
+#endif
+
        pgd = pgd_offset_k(addr);
        if (pgd_none(*pgd))
                return 0;