kexec: Allocate kernel above bzImage's pref_address
authorChris Koch <chrisko@google.com>
Fri, 15 Dec 2023 19:05:21 +0000 (11:05 -0800)
committerDave Hansen <dave.hansen@linux.intel.com>
Thu, 22 Feb 2024 23:13:57 +0000 (15:13 -0800)
commit43b1d3e68ee7f41c494ee5558d8def3d3d0b7f1b
tree659553db237015c70de48d9b6c71b81e1a4f8723
parentac456ca0af4fe9630cf84e7efd20b7f7bf596aab
kexec: Allocate kernel above bzImage's pref_address

A relocatable kernel will relocate itself to pref_address if it is
loaded below pref_address. This means a booted kernel may be relocating
itself to an area with reserved memory on modern systems, potentially
clobbering arbitrary data that may be important to the system.

This is often the case, as the default value of PHYSICAL_START is
0x1000000 and kernels are typically loaded at 0x100000 or above by
bootloaders like iPXE or kexec. GRUB behaves like the approach
implemented here.

Also fixes the documentation around pref_address and PHYSICAL_START to
be accurate.

[ dhansen: changelog tweak ]

Co-developed-by: Cloud Hsu <cloudhsu@google.com>
Signed-off-by: Cloud Hsu <cloudhsu@google.com>
Signed-off-by: Chris Koch <chrisko@google.com>
Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
Reviewed-by: H. Peter Anvin (Intel) <hpa@zytor.com>
Link: https://lore.kernel.org/all/20231215190521.3796022-1-chrisko%40google.com
Documentation/arch/x86/boot.rst
arch/x86/Kconfig
arch/x86/kernel/kexec-bzimage64.c