Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Fix lguest bzImage loading with CONFIG_RELOCATABLE=y

Jason Yeh sent his crashing .config: bzImages made with
CONFIG_RELOCATABLE=y put the relocs where the BSS is expected, and we
crash with unusual results such as:

lguest: unhandled trap 14 at 0xc0122ae1 (0xa9)

Relying on BSS being zero was merely laziness on my part, and
unfortunately, lguest doesn't go through the normal startup path (which
does this in asm).

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Rusty Russell and committed by
Linus Torvalds
a8a11f06 dfbab754

+5
+5
drivers/lguest/lguest.c
··· 1019 1019 * the normal data segment to get through booting. */ 1020 1020 asm volatile ("mov %0, %%fs" : : "r" (__KERNEL_DS) : "memory"); 1021 1021 1022 + /* Clear the part of the kernel data which is expected to be zero. 1023 + * Normally it will be anyway, but if we're loading from a bzImage with 1024 + * CONFIG_RELOCATALE=y, the relocations will be sitting here. */ 1025 + memset(__bss_start, 0, __bss_stop - __bss_start); 1026 + 1022 1027 /* The Host uses the top of the Guest's virtual address space for the 1023 1028 * Host<->Guest Switcher, and it tells us how much it needs in 1024 1029 * lguest_data.reserve_mem, set up on the LGUEST_INIT hypercall. */