Re: [PATCH] arm64: kaslr: consider parange is bigger than linear_region_size
From: Ard Biesheuvel <ardb@kernel.org>
Date: 2025-02-24 08:11:05
Also in:
lkml
On Mon, 24 Feb 2025 at 07:21, Keun-O Park [off-list ref] wrote:
quoted hunk ↗ jump to hunk
From: Keuno Park <redacted> On systems using 4KB pages and having 39 VA_BITS, linear_region_size gets 256GiB space. It was observed that some SoCs such as Qualcomm QCM8550 returns 40bits of PA range from MMFR0_EL1. This leads range value to have minus as the variable range is s64, so that all the calculations for randomizing linear address space are skpped. As a result of this, the kernel's linear region is not randomized. For this case, this patch sets the range by calculating memblock DRAM range to randomize the linear region of kernel. Change-Id: Ib29e45f44928937881d514fb87b4cac828b5a3f5 Fixes: 97d6786e0669 ("arm64: mm: account for hotplug memory when randomizing the linear region") Signed-off-by: Keuno Park <redacted> --- arch/arm64/mm/init.c | 5 +++++ 1 file changed, 5 insertions(+)diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c index 9c0b8d9558fc..2ee657e2d60f 100644 --- a/arch/arm64/mm/init.c +++ b/arch/arm64/mm/init.c@@ -290,6 +290,11 @@ void __init arm64_memblock_init(void) s64 range = linear_region_size - BIT(id_aa64mmfr0_parange_to_phys_shift(parange)); + if (range < 0) { + range = linear_region_size - + (memblock_end_of_DRAM() - memblock_start_of_DRAM()); + } +
Please explain how this ensures that hotplug memory still works as expected.