[PATCH v2 00/29] implement KASLR for ARM
Ard Biesheuvel
ard.biesheuvel at linaro.org
Wed Sep 6 09:35:36 PDT 2017
On 6 September 2017 at 17:31, Tony Lindgren <tony at atomide.com> wrote:
> * Ard Biesheuvel <ard.biesheuvel at linaro.org> [170906 09:26]:
>> On 6 September 2017 at 17:22, Tony Lindgren <tony at atomide.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);
More information about the linux-arm-kernel
mailing list