pmbr: Only load the first 545k rather than error out

It would be nice to have larger boot partitions for ESPs to live in one
day. It's trivial to carve out 5M 10M or 200M when provisioning, but
logistical issues may make it hard to do it after the fact. So only warn
when the partition is > 545k. If we ever grow the boot loader larger
than that, then it will be responsible for loading the rest anyway.

Sponsored by:		Netflix
Reviewed by:		tsoome
Differential Revision:	https://reviews.freebsd.org/D42774
This commit is contained in:
Warner Losh 2023-11-27 15:40:40 -07:00
parent a5c2781934
commit c596126a5d

View file

@ -155,8 +155,10 @@ next_boot: addl $1,(%si) # Next LBA
mov %es,%ax # Adjust segment for next mov %es,%ax # Adjust segment for next
addw $SECSIZE/16,%ax # sector addw $SECSIZE/16,%ax # sector
cmp $0x9000,%ax # Don't load past 0x90000, cmp $0x9000,%ax # Don't load past 0x90000,
jae err_big # 545k should be enough for jb sz_ok # 545k should be enough for
mov %ax,%es # any boot code. :) call err_big # any boot code, but warn
mov $0x9000-SECSIZE/16,%ax # and truncate
sz_ok: mov %ax,%es
jmp load_boot jmp load_boot
# #
# Move to the next partition. If we walk off the end of the sector, load # Move to the next partition. If we walk off the end of the sector, load
@ -203,17 +205,21 @@ getdrvparams:
# #
# Various error message entry points. # Various error message entry points.
# #
err_big: movw $msg_big,%si # "Boot loader too err_big: movw $msg_big,%si # "Truncated
jmp putstr # large" call putstr # to 545k"
ret
err_pt: movw $msg_pt,%si # "Invalid partition err_pt: movw $msg_pt,%si # "Invalid partition
jmp putstr # table" call putstr # table"
err_pt.1: jmp err_pt.1 # Await reset
err_rd: movw $msg_rd,%si # "I/O error loading err_rd: movw $msg_rd,%si # "I/O error loading
jmp putstr # boot loader" call putstr # boot loader"
jmp err_pt.1
err_noboot: movw $msg_noboot,%si # "Missing boot err_noboot: movw $msg_noboot,%si # "Missing boot
jmp putstr # loader" call putstr # loader"
jmp err_pt.1
# #
# Output an ASCIZ string to the console via the BIOS. # Output an ASCIZ string to the console via the BIOS.
# #
@ -223,9 +229,9 @@ putstr.0: movw $0x7,%bx # Page:attribute
putstr: lodsb # Get character putstr: lodsb # Get character
testb %al,%al # End of string? testb %al,%al # End of string?
jnz putstr.0 # No jnz putstr.0 # No
putstr.1: jmp putstr.1 # Await reset ret
msg_big: .asciz "Boot loader too large" msg_big: .asciz "Loaded only 545k"
msg_pt: .asciz "Invalid partition table" msg_pt: .asciz "Invalid partition table"
msg_rd: .asciz "I/O error loading boot loader" msg_rd: .asciz "I/O error loading boot loader"
msg_noboot: .asciz "Missing boot loader" msg_noboot: .asciz "Missing boot loader"