blob: d4679327306b670ea73a52d6ea3b3e631490b70f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
From 87d2cdd51327ab001d3cb68a714260f54bafba41 Mon Sep 17 00:00:00 2001
From: Jan Beulich <jbeulich@suse.com>
Date: Tue, 24 Sep 2024 14:52:15 +0200
Subject: [PATCH 07/25] 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@suse.com>
Reviewed-by: Michal Orzel <michal.orzel@amd.com>
master commit: fe3412ab83cc53c2bf2c497be3794bc09751efa5
master date: 2024-08-13 21:50:55 +0100
---
xen/arch/arm/include/asm/fixmap.h | 2 +-
xen/arch/arm/mm.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 734eb9b1d4..c92594c438 100644
--- a/xen/arch/arm/include/asm/fixmap.h
+++ b/xen/arch/arm/include/asm/fixmap.h
@@ -18,7 +18,7 @@
#define FIXMAP_LAST FIXMAP_PMAP_END
#define FIXADDR_START FIXMAP_ADDR(0)
-#define FIXADDR_TOP FIXMAP_ADDR(FIXMAP_LAST)
+#define FIXADDR_TOP FIXMAP_ADDR(FIXMAP_LAST + 1)
#ifndef __ASSEMBLY__
diff --git a/xen/arch/arm/mm.c b/xen/arch/arm/mm.c
index c34cc94c90..1ff67ff2b5 100644
--- a/xen/arch/arm/mm.c
+++ b/xen/arch/arm/mm.c
@@ -198,6 +198,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);
}
static lpae_t *xen_map_table(mfn_t mfn)
--
2.46.1
|