Re: [tip:x86/boot] x86/boot: Early parse RSDP and save it in boot_params

From: Guenter Roeck
Date: Fri Feb 08 2019 - 15:44:57 EST


On Fri, Feb 08, 2019 at 08:10:24PM +0100, Borislav Petkov wrote:
> On Fri, Feb 08, 2019 at 11:02:48AM -0800, Guenter Roeck wrote:
> > Hi,
> >
> > On Fri, Feb 01, 2019 at 03:01:11AM -0800, tip-bot for Chao Fan wrote:
> > > Commit-ID: 3a63f70bf4c3a17f5d9c9bf3bc3288a23bdfefce
> > > Gitweb: https://git.kernel.org/tip/3a63f70bf4c3a17f5d9c9bf3bc3288a23bdfefce
> > > Author: Chao Fan <fanc.fnst@xxxxxxxxxxxxxx>
> > > AuthorDate: Wed, 23 Jan 2019 19:08:48 +0800
> > > Committer: Borislav Petkov <bp@xxxxxxx>
> > > CommitDate: Fri, 1 Feb 2019 11:52:55 +0100
> > >
> > > x86/boot: Early parse RSDP and save it in boot_params
> > >
> > > The RSDP is needed by KASLR so parse it early and save it in
> > > boot_params.acpi_rsdp_addr, before KASLR setup runs.
> > >
> > > RSDP is needed by other kernel facilities so have the parsing code
> > > built-in instead of a long "depends on" line in Kconfig.
> > >
> > > [ bp:
> > > - Trim commit message and comments
> > > - Add CONFIG_ACPI dependency in the Makefile
> > > - Move ->acpi_rsdp_addr assignment with the rest of boot_params massaging in extract_kernel().
> > > ]
> > >
> >
> > This patch causes x86_64 boots with efi32 bios to crash early and hard
> > (before any console output is seen).
> >
> > Sample qemu command line:
> >
> > qemu-system-x86_64 -kernel arch/x86/boot/bzImage -M q35 -cpu SandyBridge \
> > -no-reboot -snapshot -smp 4 \
> > -bios OVMF-pure-efi-32.fd \
> > -m 1G \
> > -usb -device usb-storage,drive=d0 \
> > -drive file=rootfs.squashfs,if=none,id=d0,format=raw \
> > --append 'earlycon=uart8250,io,0x3f8,9600n8 root=/dev/sda rootwait panic=-1 console=ttyS0' \
> > -nographic
> >
> > This is with qemu 3.1, though details other than "-bios OVMF-pure-efi-32.fd"
> > don't really matter.
> >
> > Files used above are available from https://github.com/groeck/linux-build-test/.
> >
> > The patch can not be reverted alone, but
> >
> > Revert "x86/boot/KASLR: Limit KASLR to extract the kernel in immovable memory only"
> > Revert "x86/boot: Parse SRAT table and count immovable memory regions"
> > Revert "x86/boot: Early parse RSDP and save it in boot_params"
> >
> > fixes the problem.
>
> Does it per chance at least continue booting if you return 0 and early
> from efi_get_rsdp_addr() ?
>
Yes, the kernel boots if I comment out that function and have it return 0.

Guenter

> Chao, pls take a look.
>
> Thx.
>
> --
> Regards/Gruss,
> Boris.
>
> Good mailing practices for 400: avoid top-posting and trim the reply.