Patch "x86/mm/KASLR: Exclude EFI region from KASLR VA space randomization" has been added to the 4.9-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
x86/mm/KASLR: Exclude EFI region from KASLR VA space randomization
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
x86-mm-kaslr-exclude-efi-region-from-kaslr-va-space-randomization.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
a46f60d76004965e5669dbf3fc21ef3bc3632eb4Mon Sep 17 00:00:00 2001
From: Baoquan He <[email protected]>
Date: Fri, 24 Mar 2017 12:59:52 +0800
Subject: x86/mm/KASLR: Exclude EFI region from KASLR VA space randomization
From: Baoquan He <[email protected]>
commit a46f60d76004965e5669dbf3fc21ef3bc3632eb4 upstream.
Currently KASLR is enabled on three regions: the direct mapping of physical memory, vamlloc and vmemmap. However the EFI region is also mistakenly included for VA space randomization because of misusing EFI_VA_START macro and assuming EFI_VA_START < EFI_VA_END.
(This breaks kexec and possibly other things that rely on stable addresses.)
The EFI region is reserved for EFI runtime services virtual mapping which should not be included in KASLR ranges. In Documentation/x86/x86_64/mm.txt, we can see:
ffffffef00000000 - fffffffeffffffff (=64 GB) EFI region mapping space
EFI uses the space from -4G to -64G thus EFI_VA_START > EFI_VA_END, Here EFI_VA_START = -4G, and EFI_VA_END = -64G.
Changing EFI_VA_START to EFI_VA_END in mm/kaslr.c fixes this problem.
--- arch/x86/mm/kaslr.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
arch/x86/mm/kaslr.c +2 -2
@@ -48,7 +48,7 @@ static const unsigned long vaddr_start =#if defined(CONFIG_X86_ESPFIX64 )static const unsigned long vaddr_end =ESPFIX_BASE_ADDR ;#elif defined(CONFIG_EFI ) -static const unsigned long vaddr_end =EFI_VA_START ; +static const unsigned long vaddr_end =EFI_VA_END ;#else static const unsigned long vaddr_end = __START_KERNEL_map;#endif
@@ -105,7 +105,7 @@ void __init kernel_randomize_memory(void*/ BUILD_BUG_ON (vaddr_start >= vaddr_end);BUILD_BUG_ON (IS_ENABLED (CONFIG_X86_ESPFIX64 ) && - vaddr_end >=EFI_VA_START ); + vaddr_end >=EFI_VA_END );BUILD_BUG_ON ((IS_ENABLED (CONFIG_X86_ESPFIX64 ) ||IS_ENABLED (CONFIG_EFI )) && vaddr_end >= __START_KERNEL_map);
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/x86-mm-kaslr-exclude-efi-region-from-kaslr-va-space-randomization.patch