Signed-off-by: Qiumiao Zhang <zhangqiumiao1@huawei.com> (cherry picked from commit dd302052047a8a8a61b163eb57a12055ed6697bf)
46 lines
1.7 KiB
Diff
46 lines
1.7 KiB
Diff
From 04288974f6d81019314cbf9cbd72ab1fae95496f Mon Sep 17 00:00:00 2001
|
|
From: Michael Brown <mcb30@ipxe.org>
|
|
Date: Wed, 16 Feb 2022 12:30:02 +0000
|
|
Subject: [PATCH] [pci] Ensure that pci_read_config() initialises all fields
|
|
|
|
As per the general pattern for initialisation functions in iPXE,
|
|
pci_init() saves code size by assuming that the caller has already
|
|
zeroed the underlying storage (e.g. as part of zeroing a larger
|
|
containing structure). There are several places within the code where
|
|
pci_init() is deliberately used to initialise a transient struct
|
|
pci_device without zeroing the entire structure, because the calling
|
|
code knows that only the PCI bus:dev.fn address is required to be
|
|
initialised (e.g. when reading from PCI configuration space).
|
|
|
|
Ensure that using pci_init() followed by pci_read_config() will fully
|
|
initialise the struct pci_device even if the caller did not previously
|
|
zero the underlying storage, since Coverity reports that there are
|
|
several places in the code that rely upon this.
|
|
|
|
Signed-off-by: Michael Brown <mcb30@ipxe.org>
|
|
|
|
Conflict:NA
|
|
Reference:https://github.com/ipxe/ipxe/commit/04288974f6d81019314cbf9cbd72ab1fae95496f
|
|
---
|
|
src/drivers/bus/pci.c | 5 +++++
|
|
1 file changed, 5 insertions(+)
|
|
|
|
diff --git a/src/drivers/bus/pci.c b/src/drivers/bus/pci.c
|
|
index 1b7350c8b8..5891e42ff4 100644
|
|
--- a/src/drivers/bus/pci.c
|
|
+++ b/src/drivers/bus/pci.c
|
|
@@ -121,6 +121,11 @@ static void pci_read_bases ( struct pci_device *pci ) {
|
|
unsigned long bar;
|
|
int reg;
|
|
|
|
+ /* Clear any existing base addresses */
|
|
+ pci->ioaddr = 0;
|
|
+ pci->membase = 0;
|
|
+
|
|
+ /* Get first memory and I/O BAR addresses */
|
|
for ( reg = PCI_BASE_ADDRESS_0; reg <= PCI_BASE_ADDRESS_5; reg += 4 ) {
|
|
bar = pci_bar ( pci, reg );
|
|
if ( bar & PCI_BASE_ADDRESS_SPACE_IO ) {
|
|
|
|
|