osresearch / safeboot-loader

Linux kernel module to use UEFI Block IO Protocol devices. Probably not a good idea.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Allocation failure when booting on real hardware

osresearch opened this issue · comments

Booting on a Dell r630 with 32 GB of RAM leads to a allocation failure:

Booting from PXE Device 1: Integrated NIC 1 Port 1 Partition 1

>>Start PXE over IPv4.
  Station IP address is 10.1.0.115

  Server IP address is 10.0.0.1
  NBP filename is bzImage
  NBP filesize is 15679668 Bytes
 Downloading NBP file...

  Succeed to download NBP file.
UEFI string test
efilib says hello
SysTab:  000000007A188F18
BootSvc: 0000000076B0C660
kernel:  0000000066AFB000 + 002702A0
initrd:  0000000066D7B000 + 00C77C00
cmdline: 00000000679FB000 + 000000B7
params:  0000000068DDB000 + 000000B7
cmdline: 0000000068E28000 + 000000B8
0000000040000000 + 20000000: memory allocation failed!
Failed to reserve room for Linux

Removing the check "works", although it is a total hack. The loader.c should be modified to allow arbitrary allocation and build the command line exactmap instead.

Loading at arbitrary addresses has a few caveats:

  • the chainload expects hard coded addresses. they will need to be specified or passed via context in low memory
  • the allocation must be above 1 GB limit to avoid cr3[0] page mapping conflicts