[pxe] Warn about PXE NBPs that may be EFI executables
authorMichael Brown <mcb30@ipxe.org>
Fri, 21 Aug 2015 14:04:31 +0000 (15:04 +0100)
committerMichael Brown <mcb30@ipxe.org>
Fri, 21 Aug 2015 14:13:19 +0000 (15:13 +0100)
commitfb4ce72e64f14576f51d652ad949dabaced7b45e
treef729163844781dc48f71c8d9cfb7d8c78e1d5e70
parent0a34c2aab9951bf571a5093a5a8d0f6d1f5ca107
[pxe] Warn about PXE NBPs that may be EFI executables

A relatively common user mistake is to attempt to boot an EFI
executable (such as grub.efi) using a BIOS version of iPXE.

Unfortunately there are no signature checks that we can use to
unambiguously identify a PXE NBP, since a PXE NBP is just raw machine
code.  We therefore have to accept anything sufficiently small to fit
into base memory as a valid PXE NBP.

We can detect that a file might be an EFI executable by checking for
the initial "MZ" signature bytes.  This does not necessarily preclude
the file from also being a PXE NBP (since it would be possible to
create a hybrid binary which acts as both an EFI executable and a PXE
NBP, similar to the way in which wimboot and the Linux kernel are
hybrid binaries which act as both an EFI executable and a bzImage).

If the initial "MZ" signature bytes are present, then attempt to warn
the user by setting the image type to "PXE-NBP (may be EFI?)".  We
can't (sensibly) prevent the user from accidentally running an EFI
executable as a PXE NBP, but we can at least make it easier for the
user to identify their mistake.

Inspired-by: Robin Smidsrød <robin@smidsrod.no>
Inspired-by: Wissam Shoukair <wissams@mellanox.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/arch/i386/image/pxe_image.c