Message ID | 20250224062111.66528-1-kpark3469@gmail.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | arm64: kaslr: consider parange is bigger than linear_region_size | expand |
On Mon, 24 Feb 2025 at 07:21, Keun-O Park <kpark3469@gmail.com> wrote: > > From: Keuno Park <keun-o.park@katim.com> > > 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 <keun-o.park@katim.com> > --- > 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.
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()); + } + /* * If the size of the linear region exceeds, by a sufficient * margin, the size of the region that the physical memory can