On Tue, Dec 27, 2022 at 7:47 PM Dzmitry Sankouski <dsankou...@gmail.com> wrote: > > KASLR address is needed to boot fully functional Android. > KASLR is set by primary bootloader, and since u-boot is used > as a secondary bootloader(replacing kernel) on sdm845 platform, > KASLR may be found by comparing memory chunks at relocaddr over > supposed KASLR range.
By KASLR I presume you mean the random seed? KASLR is a technology used in the kernel, but it's actually a random seed that's passed to the kernel to generate the random layout. > Signed-off-by: Dzmitry Sankouski <dsankou...@gmail.com> > --- > arch/arm/mach-snapdragon/init_sdm845.c | 18 ++++++++++++++++++ > 1 file changed, 18 insertions(+) > > diff --git a/arch/arm/mach-snapdragon/init_sdm845.c > b/arch/arm/mach-snapdragon/init_sdm845.c > index 5f53c21947..1f88502394 100644 > --- a/arch/arm/mach-snapdragon/init_sdm845.c > +++ b/arch/arm/mach-snapdragon/init_sdm845.c > @@ -78,5 +78,23 @@ __weak int misc_init_r(void) > env_set("key_power", "0"); > } > > + /* > + * search for kaslr address, set by primary bootloader by searching > first > + * 0x100 relocated bytes at u-boot's initial load address range > + */ > + uintptr_t start = gd->ram_base; > + uintptr_t end = start + 0x800000; > + u8 *addr = (u8 *)start; > + phys_addr_t *relocaddr = (phys_addr_t *)gd->relocaddr; > + u32 block_size = 0x1000; > + > + while (memcmp(addr, relocaddr, 0x100) && (uintptr_t)addr < end) > + addr += block_size; > + > + if ((uintptr_t)addr >= end) > + printf("KASLR not found in range 0x%lx - 0x%lx", start, end); > + else > + env_set_addr("KASLR", addr); > + > return 0; > } > -- > 2.30.2 >