1
0
mirror of https://github.com/ipxe/ipxe.git synced 2026-10-24 07:59:35 +03:00
Michael Brown 2fa08affe9 [pci] Check device presence before checking for multi-function device
There are two checks that we perform to see whether a PCI device
exists at a given bus:dev.fn address.  We check to see if the vendor
and device IDs read as either all-zeros or all-ones, and for a
non-zero function number we also check that the device is actually a
multi-function device by reading the header type from the device's
function zero.

For historical reasons, the multi-function header type check is
currently performed before the existence check.  (The code originally
supported only a one-time linear enumeration of the PCI bus, and so
the header type for function zero was already known: checking the
header type first therefore used to allow the read of the vendor and
device IDs to be elided completely.)

On some UEFI systems (observed on an AWS a1.metal instance in
eu-central-1), attempting to read the vendor and device IDs for a
non-existent device will work as expected, but attempting to read the
header type will lock up the system.  (No further diagnostics are
available: the a1.metal instance type has no serial port and does not
support taking a screenshot, and so the only available output is from
the iPXE disk log console.)

Work around this curious defect by swapping the order of the existence
and header type checks.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
2026-10-20 12:34:39 +01:00
2026-08-06 12:47:53 +01:00
2026-03-06 15:48:55 +00:00
2026-08-06 12:47:53 +01:00
2015-02-26 17:59:53 +00:00
2026-08-06 00:01:56 +01:00

iPXE network bootloader

Build Coverity Release

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,

  • create interactive forms and menus.

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.

Description
Сетевой загрузчик iPXE
https://ipxe.org
Readme 133 MiB
Languages
C 98.5%
Assembly 0.6%
Python 0.3%
Perl 0.3%
Makefile 0.2%