summaryrefslogtreecommitdiffstats
path: root/DuetPkg
diff options
context:
space:
mode:
authorLee Leahy <leroy.p.leahy@intel.com>2016-02-26 10:07:51 +0800
committerRuiyu Ni <ruiyu.ni@intel.com>2016-02-26 10:39:15 +0800
commitba33c80fc594404872bc6f33e48d38836e9384a0 (patch)
tree9680fded778a9ffd03b13343288324f17ae6cb38 /DuetPkg
parente89d672110aaf1c5a85404375ca6767b099d3b50 (diff)
downloadedk2-ba33c80fc594404872bc6f33e48d38836e9384a0.tar.gz
edk2-ba33c80fc594404872bc6f33e48d38836e9384a0.tar.bz2
edk2-ba33c80fc594404872bc6f33e48d38836e9384a0.zip
DuetPkg-PciBusNoEnumerationDxe: Fix stack overflow
When a PCI bridge is not enabled, the secondary bus may still be zero. This causes an infinite recursive call to enumerate bus 0 which results in a stack overflow. The easy fix is to skip the recursive bus enumeration for bridges which do not have the secondary bus initialized. TEST=Build and run CorebootPayloadPkg on Quark/Galileo Gen2 Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Lee Leahy <leroy.p.leahy@intel.com> Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com>
Diffstat (limited to 'DuetPkg')
-rw-r--r--DuetPkg/PciBusNoEnumerationDxe/PciEnumeratorSupport.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/DuetPkg/PciBusNoEnumerationDxe/PciEnumeratorSupport.c b/DuetPkg/PciBusNoEnumerationDxe/PciEnumeratorSupport.c
index 80b2b6b24d..ca300cf675 100644
--- a/DuetPkg/PciBusNoEnumerationDxe/PciEnumeratorSupport.c
+++ b/DuetPkg/PciBusNoEnumerationDxe/PciEnumeratorSupport.c
@@ -1,6 +1,6 @@
/*++
-Copyright (c) 2005 - 2014, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2005 - 2016, Intel Corporation. All rights reserved.<BR>
(C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
@@ -257,13 +257,14 @@ Returns:
}
//
- // Deep enumerate the next level bus
+ // If the PCI bridge is initialized then enumerate the next level bus
//
- Status = PciPciDeviceInfoCollector (
- PciIoDevice,
- (UINT8) (SecBus)
- );
-
+ if (SecBus != 0) {
+ Status = PciPciDeviceInfoCollector (
+ PciIoDevice,
+ (UINT8) (SecBus)
+ );
+ }
}
if (Func == 0 && !IS_PCI_MULTI_FUNC (&Pci)) {