summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNico Huber <nico.h@gmx.de>2022-08-05 13:16:31 +0200
committerFelix Held <felix-coreboot@felixheld.de>2022-08-17 19:09:05 +0000
commitb511804169038ba3bff5b8b9b81978234cc9b58b (patch)
treeaae1b215a1512e275afabfd5d4bf8afda69e7ba0 /src
parentbba97354b05cc8770d6d913bfe5777b46450bbb8 (diff)
pciexp_device: Drop quirk handling in pciexp_get_ext_cap_offset()
Keeping these checks in generic code seems rather dangerous. In theory, it could lead to endless loops even for compliant devices, if we accidentally detect arbitrary register contents as capability and use them as a pointer to another one. Not to forget that the register reads can have side effects. All users of this `cafe` have been converted to use pciexp_find_ext_vendor_cap(). Change-Id: I70d21534e04282a4156572a290b83c46be085e0c Signed-off-by: Nico Huber <nico.h@gmx.de> Reviewed-on: https://review.coreboot.org/c/coreboot/+/66456 Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Diffstat (limited to 'src')
-rw-r--r--src/device/pciexp_device.c5
1 files changed, 1 insertions, 4 deletions
diff --git a/src/device/pciexp_device.c b/src/device/pciexp_device.c
index 3bb5cb82df..903ecdd941 100644
--- a/src/device/pciexp_device.c
+++ b/src/device/pciexp_device.c
@@ -13,17 +13,14 @@ static unsigned int pciexp_get_ext_cap_offset(const struct device *dev, unsigned
unsigned int offset)
{
unsigned int this_cap_offset = offset;
- unsigned int next_cap_offset, this_cap, cafe;
+ unsigned int next_cap_offset, this_cap;
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)
break;
- cafe = pci_read_config32(dev, this_cap_offset + 4);
if ((this_cap & 0xffff) == cap) {
return this_cap_offset;
- } else if ((cafe & 0xffff) == cap) {
- return this_cap_offset + 4;
} else {
next_cap_offset = this_cap >> 20;
this_cap_offset = next_cap_offset;