[RFC PATCH 1/7] arm64: ptdump: Disregard unaddressable VA space

Ard Biesheuvel
2022-11-17T13:26:30Z

Configurations built with support for 52-bit virtual addressing can also
run on CPUs that only support 48 bits of VA space, in which case only
that part of swapper_pg_dir that represents the 48-bit addressable
region is relevant, and everything else is ignored by the hardware.

In a future patch, we will clone the top 2 pgd_t entries at the bottom,
to support 52-bit VA configurations built for 16k pages and LPA2, where
we cannot simply point TTBR1 to the pgd_t entries where they actually
reside. However, we should avoid misinterpreting those cloned entries as
describing the start of the 52-bit VA space when the hardware does not
support that.

Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
---
arch/arm64/mm/ptdump.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/arch/arm64/mm/ptdump.c b/arch/arm64/mm/ptdump.c
index 9bc4066c5bf33a72..6c13bf6b7d5df4e4 100644
--- a/arch/arm64/mm/ptdump.c
+++ b/arch/arm64/mm/ptdump.c
@@ -358,7 +358,7 @@ void ptdump_check_wx(void)
.ptdump = {
.note_page = note_page,
.range = (struct ptdump_range[]) {
- {PAGE_OFFSET, ~0UL},
+ {_PAGE_OFFSET(vabits_actual), ~0UL},
{0, 0}
}
}
@@ -380,6 +380,8 @@ static int __init ptdump_init(void)
address_markers[KASAN_START_NR].start_address = KASAN_SHADOW_START;
#endif
ptdump_initialize();
+ if (VA_BITS > VA_BITS_MIN)
+ kernel_ptdump_info.base_addr = _PAGE_OFFSET(vabits_actual);
ptdump_debugfs_register(&kernel_ptdump_info, "kernel_page_tables");
return 0;
}