]> git.ipfire.org Git - thirdparty/ipxe.git/commit
[pci] Check for wraparound in callers of pci_find_next()
authorMichael Brown <mcb30@ipxe.org>
Thu, 15 Sep 2022 14:04:01 +0000 (15:04 +0100)
committerMichael Brown <mcb30@ipxe.org>
Thu, 15 Sep 2022 14:20:58 +0000 (15:20 +0100)
commit56b30364c5db6367279ffe88929f286f15680b40
tree0062a8909e99c573d3c421d7d73a8321bff289f0
parent8fc3c26eae8d45a5391a39ee698817449299bd76
[pci] Check for wraparound in callers of pci_find_next()

The semantics of the bus:dev.fn parameter passed to pci_find_next()
are "find the first existent PCI device at this address or higher",
with the caller expected to increment the address between finding
devices.  This does not allow the parameter to distinguish between the
two cases "start from address zero" and "wrapped after incrementing
maximal possible address", which could therefore lead to an infinite
loop in the degenerate case that a device with address ffff:ff:1f.7
really exists.

Fix by checking for wraparound in the caller (which is already
responsible for performing the increment).

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/drivers/bus/pci.c
src/hci/commands/pci_cmd.c
src/include/ipxe/errfile.h