\r
@param[in] PciExpressCap PCI Express capability buffer.\r
@param[in] ExtendedConfigSpace PCI Express extended configuration space.\r
+ @param[in] ExtendedConfigSize PCI Express extended configuration size.\r
@param[in] ExtendedCapability PCI Express extended capability ID to explain.\r
**/\r
VOID\r
PciExplainPciExpress (\r
IN PCI_CAPABILITY_PCIEXP *PciExpressCap,\r
IN UINT8 *ExtendedConfigSpace,\r
+ IN UINTN ExtendedConfigSize,\r
IN CONST UINT16 ExtendedCapability\r
);\r
\r
PciExplainPciExpress (\r
(PCI_CAPABILITY_PCIEXP *) ((UINT8 *) &ConfigSpace + PcieCapabilityPtr),\r
ExtendedConfigSpace,\r
+ ExtendedConfigSize,\r
ExtendedCapability\r
);\r
}\r
\r
@param[in] PciExpressCap PCI Express capability buffer.\r
@param[in] ExtendedConfigSpace PCI Express extended configuration space.\r
+ @param[in] ExtendedConfigSize PCI Express extended configuration size.\r
@param[in] ExtendedCapability PCI Express extended capability ID to explain.\r
**/\r
VOID\r
PciExplainPciExpress (\r
IN PCI_CAPABILITY_PCIEXP *PciExpressCap,\r
IN UINT8 *ExtendedConfigSpace,\r
+ IN UINTN ExtendedConfigSize,\r
IN CONST UINT16 ExtendedCapability\r
)\r
{\r
}\r
\r
ExtHdr = (PCI_EXP_EXT_HDR*)ExtendedConfigSpace;\r
- while (ExtHdr->CapabilityId != 0 && ExtHdr->CapabilityVersion != 0) {\r
+ while (ExtHdr->CapabilityId != 0 && ExtHdr->CapabilityVersion != 0 && ExtHdr->CapabilityId != 0xFFFF) {\r
//\r
// Process this item\r
//\r
//\r
// Advance to the next item if it exists\r
//\r
- if (ExtHdr->NextCapabilityOffset != 0) {\r
+ if (ExtHdr->NextCapabilityOffset != 0 &&\r
+ (ExtHdr->NextCapabilityOffset <= (UINT32) (ExtendedConfigSize + EFI_PCIE_CAPABILITY_BASE_OFFSET - sizeof (PCI_EXP_EXT_HDR)))) {\r
ExtHdr = (PCI_EXP_EXT_HDR*)(ExtendedConfigSpace + ExtHdr->NextCapabilityOffset - EFI_PCIE_CAPABILITY_BASE_OFFSET);\r
} else {\r
break;\r