|
Message-ID: <CAKv+Gu-HGM6T6cV25bo6_bBcZaV-x3qpc9XoYUA4AEx68Joz=A@mail.gmail.com> Date: Wed, 6 Sep 2017 17:35:36 +0100 From: Ard Biesheuvel <ard.biesheuvel@...aro.org> To: Tony Lindgren <tony@...mide.com> Cc: "linux-arm-kernel@...ts.infradead.org" <linux-arm-kernel@...ts.infradead.org>, Kernel Hardening <kernel-hardening@...ts.openwall.com>, Arnd Bergmann <arnd@...db.de>, Nicolas Pitre <nico@...aro.org>, Russell King <linux@...linux.org.uk>, Kees Cook <keescook@...omium.org>, Thomas Garnier <thgarnie@...gle.com>, Marc Zyngier <marc.zyngier@....com>, Mark Rutland <mark.rutland@....com>, Matt Fleming <matt@...eblueprint.co.uk>, Dave Martin <dave.martin@....com> Subject: Re: [PATCH v2 00/29] implement KASLR for ARM On 6 September 2017 at 17:31, Tony Lindgren <tony@...mide.com> wrote: > * Ard Biesheuvel <ard.biesheuvel@...aro.org> [170906 09:26]: >> On 6 September 2017 at 17:22, Tony Lindgren <tony@...mide.com> wrote: >> > Sure was not able to reproduce it so far on BBB. But here's >> > failed boot output from logicpd-torpedo-37xx-devkit. Will >> > try some more booting on BBB too. > ... >> > 8< ------------------- >> > Kernel image @ 0x81000000 [ 0x000000 - 0x426810 ] >> > ## Flattened Device Tree blob at 84000000 >> > Booting using the fdt blob at 0x84000000 >> > Loading Device Tree to 86feb000, end 86fff2d5 ... OK >> > >> > Starting kernel ... >> > >> > regions.image_size:00e00000 >> > regions.pa_start:80000000 >> > regions.pa_end:88000000 >> > regions.zimage_start:81000000 >> > regions.zimage_size:00437830 >> > regions.dtb_start:86feb000 >> > regions.dtb_size:00012000 >> > regions.initrd_start:00000000 >> > regions.initrd_size:00000000 >> > num:0000002f >> > num:00000029 >> > *kaslr_offset:07400000 >> > Uncompressing Linux... >> >> Is that all? Does it hang while decompressing the kernel? > > Yeah so it seems. If we had uncompress overwriting something > because of the increase in size it should happen on every > boot though, not once every five boots or so. > Turns out I am calculating the top of DRAM incorrectly for boards where less memory is present than the size of the lowmem region. Could you try this please? (Apologies for the whitespace) diff --git a/arch/arm/boot/compressed/kaslr.c b/arch/arm/boot/compressed/kaslr.c index d43c0be9b47b..e9c86809c857 100644 --- a/arch/arm/boot/compressed/kaslr.c +++ b/arch/arm/boot/compressed/kaslr.c @@ -339,8 +339,7 @@ u32 kaslr_early_init(u32 *kaslr_offset, u32 image_base, u32 image_size, regions.image_size = round_up(image_size, SZ_2M); regions.pa_start = round_down(image_base, SZ_128M); - regions.pa_end = lowmem_top - PAGE_OFFSET + regions.pa_start - - regions.image_size; + regions.pa_end = lowmem_top - PAGE_OFFSET + regions.pa_start; regions.zimage_start = zimage_start; regions.zimage_size = zimage_end - zimage_start; regions.dtb_start = (u32)fdt; @@ -391,7 +390,8 @@ u32 kaslr_early_init(u32 *kaslr_offset, u32 image_base, u32 image_size, } /* check the memory nodes for the size of the lowmem region */ - regions.pa_end = min(regions.pa_end, get_memory_end(fdt)); + regions.pa_end = min(regions.pa_end, get_memory_end(fdt)) - + regions.image_size; puthex32(regions.image_size); puthex32(regions.pa_start);
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.