]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdeModulePkg: Enhance PCI capability looking up logic to avoid hang
authorRuiyu Ni <ruiyu.ni@intel.com>
Tue, 15 Sep 2015 08:38:16 +0000 (08:38 +0000)
committerniruiyu <niruiyu@Edk2>
Tue, 15 Sep 2015 08:38:16 +0000 (08:38 +0000)
Certain PCI device may have capability pointing to itself.
Update LocateCapabilityRegBlock() to break when detecting such loop.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com>
Reviewed-by: Feng Tian <feng.tian@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18473 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/Bus/Pci/PciBusDxe/PciCommand.c

index 8a8b4b8faca8bc6a42106b3d1e4497a60249b5f6..0bc1fbfefffe7b778642f90700b0a5fdc44f60e2 100644 (file)
@@ -173,6 +173,14 @@ LocateCapabilityRegBlock (
       return EFI_SUCCESS;\r
     }\r
 \r
+    //\r
+    // Certain PCI device may incorrectly have capability pointing to itself,\r
+    // break to avoid dead loop.\r
+    //\r
+    if (CapabilityPtr == (UINT8) (CapabilityEntry >> 8)) {\r
+      break;\r
+    }\r
+\r
     CapabilityPtr = (UINT8) (CapabilityEntry >> 8);\r
   }\r
 \r