diff options
author | Ard Biesheuvel <ard.biesheuvel@linaro.org> | 2017-08-18 18:42:30 +0100 |
---|---|---|
committer | Will Deacon <will.deacon@arm.com> | 2017-08-22 18:15:42 +0100 |
commit | 4a23e56ad6549d0b8c0fac6d9eb752884379c391 (patch) | |
tree | be09ef1ef45c2eeede655b2b5f51623e99910cc7 /arch/arm64/kernel/head.S | |
parent | 289d07a2dc6c6b6f3e4b8a62669320d99dbe6c3d (diff) | |
download | op-kernel-dev-4a23e56ad6549d0b8c0fac6d9eb752884379c391.zip op-kernel-dev-4a23e56ad6549d0b8c0fac6d9eb752884379c391.tar.gz |
arm64: kaslr: ignore modulo offset when validating virtual displacement
In the KASLR setup routine, we ensure that the early virtual mapping
of the kernel image does not cover more than a single table entry at
the level above the swapper block level, so that the assembler routines
involved in setting up this mapping can remain simple.
In this calculation we add the proposed KASLR offset to the values of
the _text and _end markers, and reject it if they would end up falling
in different swapper table sized windows.
However, when taking the addresses of _text and _end, the modulo offset
(the physical displacement modulo 2 MB) is already accounted for, and
so adding it again results in incorrect results. So disregard the modulo
offset from the calculation.
Fixes: 08cdac619c81 ("arm64: relocatable: deal with physically misaligned ...")
Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
Tested-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Diffstat (limited to 'arch/arm64/kernel/head.S')
-rw-r--r-- | arch/arm64/kernel/head.S | 1 |
1 files changed, 0 insertions, 1 deletions
diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S index 973df7d..adb0910 100644 --- a/arch/arm64/kernel/head.S +++ b/arch/arm64/kernel/head.S @@ -354,7 +354,6 @@ __primary_switched: tst x23, ~(MIN_KIMG_ALIGN - 1) // already running randomized? b.ne 0f mov x0, x21 // pass FDT address in x0 - mov x1, x23 // pass modulo offset in x1 bl kaslr_early_init // parse FDT for KASLR options cbz x0, 0f // KASLR disabled? just proceed orr x23, x23, x0 // record KASLR offset |