Re: git: 39fdad34e220 - main - stand: impose 510,000 byte limit for /boot/loader and /boot/pxeldr
- Reply: Warner Losh : "Re: git: 39fdad34e220 - main - stand: impose 510,000 byte limit for /boot/loader and /boot/pxeldr"
- In reply to: Warner Losh : "git: 39fdad34e220 - main - stand: impose 510,000 byte limit for /boot/loader and /boot/pxeldr"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 11 Aug 2022 19:17:40 UTC
Am Thu, 11 Aug 2022 03:31:36 GMT
Warner Losh <imp@FreeBSD.org> schrieb:
> The branch main has been updated by imp:
>
> URL: https://cgit.FreeBSD.org/src/commit/?id=39fdad34e220c52a433e78f20c8c39412429014e
>
> commit 39fdad34e220c52a433e78f20c8c39412429014e
> Author: Warner Losh <imp@FreeBSD.org>
> AuthorDate: 2022-08-11 03:19:01 +0000
> Commit: Warner Losh <imp@FreeBSD.org>
> CommitDate: 2022-08-11 03:29:20 +0000
>
> stand: impose 510,000 byte limit for /boot/loader and /boot/pxeldr
>
> The BIOS method of booting imposes an absolute limit of 640k for the
> size of the program being run due to btx. In practice, this means that
> programs larger than about 500kiB will fail in odd ways as the stack /
> heap will overflow.
>
> Pick 510,000 as the cutoff line semi-arbitrarily. loader_lua is now
> almost too big and we want to break the build when it crosses this
> threshold. In my experience, below 500,000 always works, above 520,000
> always seems to fail with things getting bad somewhere between 512,000
> to 515,000. 510,000 is as close to the line as I think we can go, though
> experience may dictate we need to lower this in the future.
>
> This is at-best a stop-breakage until we have a better way to subset the
> boot loader for BIOS booting to allow better, more fined-tuned
> /boot/loaders for the many different environments they have to run
> in. This likely means we'll have a graphical loader than understands a
> few filesystmes for installation, and a non-graphical loader that
> understands the most filesystems possible for everything else in the
> future. Our build infrastructure needs some work before we can do that,
> however.
>
> At this late date, it likely isn't worth the efforts to move parts of
> the loader into high memory. There's a number of assumptions about where
> the stack is, where buffers reside, etc that are fulfilled when it lives
> in the first 640k that would need bounce buffers and/or other counter
> measures if we were to split it up. All BIOS calls are done in 16-bit
> mode with SEG:OFF addresses, requiring them to be in the first 640k of
> RAM. And nearly all machines in the last decade can boot with UEFI
> (though there's some exceptions, so it isn't worth killing outright
> yet).
>
> Sponsored by: Netflix
> Reviewed by: kevans
> Differential Revision: https://reviews.freebsd.org/D36129
> ---
> stand/i386/loader/Makefile | 5 +++++
> stand/i386/pxeldr/Makefile | 3 +++
> 2 files changed, 8 insertions(+)
>
> diff --git a/stand/i386/loader/Makefile b/stand/i386/loader/Makefile
> index 3685281ffd2c..cde1513aac06 100644
> --- a/stand/i386/loader/Makefile
> +++ b/stand/i386/loader/Makefile
> @@ -19,6 +19,8 @@ PROG= ${LOADER}.sym
> INTERNALPROG=
> NEWVERSWHAT?= "bootstrap loader" x86
> VERSION_FILE= ${.CURDIR}/../loader/version
> +LOADERSIZE= 510000 # Largest known safe size
> +
>
> .PATH: ${BOOTSRC}/i386/loader
>
> @@ -79,9 +81,12 @@ CFLAGS+= -I${BOOTSRC}/i386
> 8x16.c: ${SRCTOP}/contrib/terminus/ter-u16b.bdf
> vtfontcvt -f compressed-source -o ${.TARGET} ${.ALLSRC}
>
> +
> ${LOADER}: ${LOADER}.bin ${BTXLDR} ${BTXKERN}
> btxld -v -f elf -e ${LOADER_ADDRESS} -o ${.TARGET} -l ${BTXLDR} \
> -b ${BTXKERN} ${LOADER}.bin
> + @set -- `${SIZE} ${.TARGET} | tail -1` ; x=$$((${LOADERSIZE}-$$4)); \
> + echo "$$x bytes available"; test $$x -ge 0
>
> ${LOADER}.bin: ${LOADER}.sym
> ${STRIPBIN} -R .comment -R .note -o ${.TARGET} ${.ALLSRC}
> diff --git a/stand/i386/pxeldr/Makefile b/stand/i386/pxeldr/Makefile
> index a44dc0de2885..f8bc1eae9a31 100644
> --- a/stand/i386/pxeldr/Makefile
> +++ b/stand/i386/pxeldr/Makefile
> @@ -13,6 +13,7 @@ BOOT= pxeboot
> LDR= pxeldr
> ORG= 0x7c00
> LOADER= loader
> +PXELDRSIZE= 510000 # Largest known safe size
>
> .if defined(BOOT_PXELDR_PROBE_KEYBOARD)
> CFLAGS+=-DPROBE_KEYBOARD
> @@ -41,5 +42,7 @@ CLEANFILES+= ${LOADER}
> ${LOADER}: ${LOADERBIN} ${BTXLDR} ${BTXKERN}
> btxld -v -f elf -e ${LOADER_ADDRESS} -o ${.TARGET} -l ${BTXLDR} \
> -b ${BTXKERN} ${LOADERBIN}
> + @set -- `${SIZE} ${.TARGET} | tail -1` ; x=$$((${PXELDRSIZE}-$$4)); \
> + echo "$$x bytes available"; test $$x -ge 0
>
> .include <bsd.prog.mk>
>
To make a long story short:
Having WITH_BEARSSL=YES
in /etc/src.conf blow off the loader. Can this be fixed?
--
O. Hartmann