]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Bus/Pci/PciBusDxe/PciResourceSupport.c
Fix a bug about linked list manipulation in DegradeResource() in PCI bus driver.
[mirror_edk2.git] / MdeModulePkg / Bus / Pci / PciBusDxe / PciResourceSupport.c
index d5f553bcc455a4aac4feba76bfe0f3a40acfc034..b0637c960c9a2ea77bf0c44a123feac0822a81de 100644 (file)
@@ -1050,6 +1050,7 @@ DegradeResource (
   PCI_IO_DEVICE        *Temp;\r
   LIST_ENTRY           *ChildDeviceLink;\r
   LIST_ENTRY           *ChildNodeLink;\r
+  LIST_ENTRY           *NextChildNodeLink;\r
   PCI_RESOURCE_NODE    *TempNode;\r
 \r
   //\r
@@ -1064,12 +1065,13 @@ DegradeResource (
         ChildNodeLink = Mem64Node->ChildList.ForwardLink;\r
         while (ChildNodeLink != &Mem64Node->ChildList) {\r
           TempNode = RESOURCE_NODE_FROM_LINK (ChildNodeLink);\r
+          NextChildNodeLink = ChildNodeLink->ForwardLink;\r
 \r
           if (TempNode->PciDev == Temp) {\r
             RemoveEntryList (ChildNodeLink);\r
             InsertResourceNode (Mem32Node, TempNode);\r
           }\r
-          ChildNodeLink = TempNode->Link.ForwardLink;\r
+          ChildNodeLink = NextChildNodeLink;\r
         }        \r
       }\r
 \r
@@ -1077,12 +1079,13 @@ DegradeResource (
         ChildNodeLink = PMem64Node->ChildList.ForwardLink;\r
         while (ChildNodeLink != &PMem64Node->ChildList) {\r
           TempNode = RESOURCE_NODE_FROM_LINK (ChildNodeLink);\r
+          NextChildNodeLink = ChildNodeLink->ForwardLink;\r
 \r
           if (TempNode->PciDev == Temp) {\r
             RemoveEntryList (ChildNodeLink);\r
             InsertResourceNode (PMem32Node, TempNode);\r
           }\r
-          ChildNodeLink = TempNode->Link.ForwardLink;\r
+          ChildNodeLink = NextChildNodeLink;\r
         }        \r
       }\r
 \r