summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNico Huber <nico.h@gmx.de>2022-08-05 12:44:11 +0200
committerFelix Held <felix-coreboot@felixheld.de>2022-08-15 19:22:20 +0000
commit4b864e5c308fd0e4efdc1a99b7216c89f5ef0570 (patch)
treea320a899d5ed7beb8fda8d6dcb4ba88dcf434298
parentebc36c1b48cc91cb96b6435cc768a6a5e7043c90 (diff)
pciexp_device: Fix pciexp_find_next_extended_cap()
If we already encountered the last extended capability in the list, we'd call pciexp_get_ext_cap_offset() with `offset == 0`. So it also needs to check if the passed offset is valid. As there were no callers of pciexp_find_next_extended_cap() yet, pciexp_get_ext_cap_offset() was only ever called with `PCIE_EXT_CAP_OFFSET`. Change-Id: I155c4691a34ff16661919913a3446fa915ac535e Signed-off-by: Nico Huber <nico.h@gmx.de> Reviewed-on: https://review.coreboot.org/c/coreboot/+/66452 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Bill XIE <persmule@hardenedlinux.org> Reviewed-by: Angel Pons <th3fanbus@gmail.com>
-rw-r--r--src/device/pciexp_device.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/device/pciexp_device.c b/src/device/pciexp_device.c
index ac4e668f08..694f1dd275 100644
--- a/src/device/pciexp_device.c
+++ b/src/device/pciexp_device.c
@@ -13,7 +13,7 @@ static unsigned int pciexp_get_ext_cap_offset(const struct device *dev, unsigned
{
unsigned int this_cap_offset = offset;
unsigned int next_cap_offset, this_cap, cafe;
- do {
+ while (this_cap_offset != 0) {
this_cap = pci_read_config32(dev, this_cap_offset);
/* Bail out when this request is unsupported */
if (this_cap == 0xffffffff)
@@ -27,7 +27,7 @@ static unsigned int pciexp_get_ext_cap_offset(const struct device *dev, unsigned
next_cap_offset = this_cap >> 20;
this_cap_offset = next_cap_offset;
}
- } while (next_cap_offset != 0);
+ }
return 0;
}