Message ID | 1458581711-13950-1-git-send-email-ard.biesheuvel@linaro.org |
---|---|
State | Accepted |
Commit | d5e5743797adc26e09db262e7a4b6b81d8c0f45c |
Headers | show |
On Mon, Mar 21, 2016 at 06:35:11PM +0100, Ard Biesheuvel wrote: > The KASLR code incorrectly expects the contents of x18 to be preserved > across a call into C code, and uses it to stash the contents of SCTLR_EL1 > before enabling the MMU. If the MMU needs to be disabled again to create > the randomized kernel mapping, x18 is written back to SCTLR_EL1, which is > likely to crash the system if x18 has been clobbered by kasan_early_init() > or kaslr_early_init(). So use x22 instead, which is not in use so far in > head.S > > Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Applied. Thanks. -- Catalin _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S index 5728ba6878e0..f03101064f52 100644 --- a/arch/arm64/kernel/head.S +++ b/arch/arm64/kernel/head.S @@ -763,7 +763,7 @@ ENTRY(__early_cpu_boot_status) */ .section ".idmap.text", "ax" __enable_mmu: - mrs x18, sctlr_el1 // preserve old SCTLR_EL1 value + mrs x22, sctlr_el1 // preserve old SCTLR_EL1 value mrs x1, ID_AA64MMFR0_EL1 ubfx x2, x1, #ID_AA64MMFR0_TGRAN_SHIFT, 4 cmp x2, #ID_AA64MMFR0_TGRAN_SUPPORTED @@ -792,7 +792,7 @@ __enable_mmu: * to take into account by discarding the current kernel mapping and * creating a new one. */ - msr sctlr_el1, x18 // disable the MMU + msr sctlr_el1, x22 // disable the MMU isb bl __create_page_tables // recreate kernel mapping
The KASLR code incorrectly expects the contents of x18 to be preserved across a call into C code, and uses it to stash the contents of SCTLR_EL1 before enabling the MMU. If the MMU needs to be disabled again to create the randomized kernel mapping, x18 is written back to SCTLR_EL1, which is likely to crash the system if x18 has been clobbered by kasan_early_init() or kaslr_early_init(). So use x22 instead, which is not in use so far in head.S Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> --- arch/arm64/kernel/head.S | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) -- 1.9.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel