[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[xen staging] Arm: correct FIXADDR_TOP



commit fe3412ab83cc53c2bf2c497be3794bc09751efa5
Author:     Jan Beulich <jbeulich@xxxxxxxx>
AuthorDate: Tue Aug 13 13:49:39 2024 +0200
Commit:     Julien Grall <julien@xxxxxxx>
CommitDate: Tue Aug 13 21:50:55 2024 +0100

    Arm: correct FIXADDR_TOP
    
    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@xxxxxxxx>
    Reviewed-by: Michal Orzel <michal.orzel@xxxxxxx>
---
 xen/arch/arm/include/asm/fixmap.h | 2 +-
 xen/arch/arm/mmu/setup.c          | 6 ++++++
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/xen/arch/arm/include/asm/fixmap.h 
b/xen/arch/arm/include/asm/fixmap.h
index a823456ecb..0cb5d54d1c 100644
--- a/xen/arch/arm/include/asm/fixmap.h
+++ b/xen/arch/arm/include/asm/fixmap.h
@@ -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__
 
diff --git a/xen/arch/arm/mmu/setup.c b/xen/arch/arm/mmu/setup.c
index f4bb424c3c..57042ed57b 100644
--- a/xen/arch/arm/mmu/setup.c
+++ b/xen/arch/arm/mmu/setup.c
@@ -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)
--
generated by git-patchbot for /home/xen/git/xen.git#staging



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.