[PATCH v2] arm64: kaslr: Fix up the kernel image alignment
From: Ard Biesheuvel <hidden>
Date: 2017-03-23 09:35:04
Also in:
linux-arm-msm, lkml
On 23 March 2017 at 09:32, Srinivas Ramana [off-list ref] wrote:
On 03/22/2017 07:15 PM, Srinivas Ramana wrote:quoted
On 03/22/2017 06:10 PM, Will Deacon wrote:quoted
On Wed, Mar 22, 2017 at 12:16:24PM +0000, Ard Biesheuvel wrote:quoted
On 22 March 2017 at 11:38, Srinivas Ramana [off-list ref] wrote:quoted
From: Neeraj Upadhyay <redacted> If kernel image extends across alignment boundary, existing code increases the KASLR offset by size of kernel image. The offset is masked after resizing. There are cases, where after masking, we may still have kernel image extending across boundary. This eventually results in only 2MB block getting mapped while creating the page tables. This results in data aborts while accessing unmapped regions during second relocation (with kaslr offset) in __primary_switch. To fix this problem, round up the kernel image size, by swapper block size, before adding it for correction. For example consider below case, where kernel image still crosses 1GB alignment boundary, after masking the offset, which is fixed by rounding up kernel image size. SWAPPER_TABLE_SHIFT = 30 Swapper using section maps with section size 2MB. CONFIG_PGTABLE_LEVELS = 3 VA_BITS = 39 _text : 0xffffff8008080000 _end : 0xffffff800aa1b000 offset : 0x1f35600000 mask = ((1UL << (VA_BITS - 2)) - 1) & ~(SZ_2M - 1) (_text + offset) >> SWAPPER_TABLE_SHIFT = 0x3fffffe7c (_end + offset) >> SWAPPER_TABLE_SHIFT = 0x3fffffe7d offset after existing correction (before mask) = 0x1f37f9b000 (_text + offset) >> SWAPPER_TABLE_SHIFT = 0x3fffffe7d (_end + offset) >> SWAPPER_TABLE_SHIFT = 0x3fffffe7d offset (after mask) = 0x1f37e00000 (_text + offset) >> SWAPPER_TABLE_SHIFT = 0x3fffffe7c (_end + offset) >> SWAPPER_TABLE_SHIFT = 0x3fffffe7d new offset w/ rounding up = 0x1f38000000 (_text + offset) >> SWAPPER_TABLE_SHIFT = 0x3fffffe7d (_end + offset) >> SWAPPER_TABLE_SHIFT = 0x3fffffe7d Fixes: f80fb3a3d508 ("arm64: add support for kernel ASLR") Signed-off-by: Neeraj Upadhyay <redacted> Signed-off-by: Srinivas Ramana <redacted>Reviewed-by: Ard Biesheuvel <redacted> ... and thanks for the excellent commit log message!Thanks both. I've picked this up as a fix. WillThanks Ard and Will for the review and picking this patch. can we also CC: [off-list ref] ? Thanks, -- Srinivas RSorry, there is a checkpatch error in the last patch. I will submit v3 after fixing the checkpatch error.
I wouldn't worry about that. Will has already queued the patch.