mirror of
https://github.com/ipxe/ipxe
synced 2026-05-08 15:02:55 +03:00
7ce5dbd76fddc50a3b0085fbf27ee6e2ba3537de
When multiple shims are present in the system (e.g. in a boot chain such as UEFI -> iPXE shim -> iPXE -> distro shim -> distro kernel), there may be more than one installed shim lock protocol. There is no sensible way to identify which shim lock protocol belongs to which shim. The shim lock protocol is installed on an anonymous handle that has no device path, no other form of identifier, and no connection to any other handle or protocol instance installed by the shim. The shim does include some extremely convoluted logic whereby a second shim will attempt to uninstall a shim lock protocol installed by an earlier shim. However, this logic is broken: the second shim calls UninstallProtocolInterface() with the wrong handle and the wrong protocol interface pointer. This logic error is silently ignored since shim does not bother to check the return status. Experience shows that there is unfortunately no point in trying to get a fix for this upstreamed into shim, or even in raising the issue with the shim project. We therefore work around the shim bug by calling all instances of the shim lock protocol, rather than relying on shim itself to ensure that only one such instance exists. Signed-off-by: Michael Brown <mcb30@ipxe.org>
iPXE network bootloader
iPXE is the leading open source network boot firmware. It provides a full PXE implementation enhanced with additional features such as:
-
boot from a web server via HTTP or HTTPS,
-
boot from an iSCSI, FCoE, or AoE SAN,
-
control the boot process with a script,
You can use iPXE to replace the existing PXE ROM on your network card, or you can chainload into iPXE to obtain the features of iPXE without the hassle of reflashing.
iPXE is free, open-source software licensed under the GNU GPL (with some portions under GPL-compatible licences).
You can download the rolling release binaries (built from the latest commit), or use the most recent stable release.
For full documentation, visit the iPXE website.
Languages
C
96.9%
Assembly
1.5%
Perl
0.6%
Python
0.4%
Makefile
0.4%