]> xenbits.xensource.com Git - xen.git/commitdiff
Arm: correct FIXADDR_TOP
authorJan Beulich <jbeulich@suse.com>
Tue, 13 Aug 2024 11:49:39 +0000 (13:49 +0200)
committerJulien Grall <julien@xen.org>
Tue, 13 Aug 2024 20:50:55 +0000 (21:50 +0100)
While reviewing a RISC-V patch cloning the Arm code, I noticed an
off-by-1 here: FIX_PMAP_{BEGIN,END} being an inclusive range and
FIX_LAST being the same as FIX_PMAP_END, FIXADDR_TOP cannot derive from
FIX_LAST alone, or else the BUG_ON() in virt_to_fix() would trigger if
FIX_PMAP_END ended up being used.

While touching this area also add a check for fixmap and boot FDT area
to not only not overlap, but to have at least one (unmapped) page in
between.

Fixes: 4f17357b52f6 ("xen/arm: add Persistent Map (PMAP) infrastructure")
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Michal Orzel <michal.orzel@amd.com>
xen/arch/arm/include/asm/fixmap.h
xen/arch/arm/mmu/setup.c

index a823456ecbc31276d3561173c0c22d49293f9c8a..0cb5d54d1c7421b733d8166fae4173e774c52b54 100644 (file)
@@ -18,7 +18,7 @@
 #define FIX_LAST FIX_PMAP_END
 
 #define FIXADDR_START FIXMAP_ADDR(0)
-#define FIXADDR_TOP FIXMAP_ADDR(FIX_LAST)
+#define FIXADDR_TOP FIXMAP_ADDR(FIX_LAST + 1)
 
 #ifndef __ASSEMBLY__
 
index f4bb424c3c914caeb55e2768964561799157a8d9..57042ed57b4a742818196b0b1cf73250df87511c 100644 (file)
@@ -128,6 +128,12 @@ static void __init __maybe_unused build_assertions(void)
 
 #undef CHECK_SAME_SLOT
 #undef CHECK_DIFFERENT_SLOT
+
+    /*
+     * Fixmaps must not overlap with boot FDT mapping area. Make sure there's
+     * at least one guard page in between.
+     */
+    BUILD_BUG_ON(FIXADDR_TOP >= BOOT_FDT_VIRT_START);
 }
 
 lpae_t __init pte_of_xenaddr(vaddr_t va)