]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[efi] Avoid returning uninitialised data from PCI configuration space reads
authorMichael Brown <mcb30@ipxe.org>
Thu, 4 Sep 2014 15:00:11 +0000 (16:00 +0100)
committerMichael Brown <mcb30@ipxe.org>
Thu, 4 Sep 2014 15:00:11 +0000 (16:00 +0100)
Under UEFI, reads from PCI configuration space may fail.  If this
happens, we should return all-ones (which will mimic the behaviour of
an absent PCI device).

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/include/ipxe/efi/efi_pci_api.h

index 1bc43e303ba4d5982865801657cf0c91a9a0d207..498a0388b0991de906d4f1989ebd9ca70d35e9e3 100644 (file)
@@ -55,6 +55,7 @@ static inline __always_inline int
 PCIAPI_INLINE ( efi, pci_read_config_byte ) ( struct pci_device *pci,
                                              unsigned int where,
                                              uint8_t *value ) {
+       *value = 0xff;
        return efipci_read ( pci,
                             EFIPCI_LOCATION ( where, EFIPCI_WIDTH_BYTE ),
                             value );
@@ -72,6 +73,7 @@ static inline __always_inline int
 PCIAPI_INLINE ( efi, pci_read_config_word ) ( struct pci_device *pci,
                                              unsigned int where,
                                              uint16_t *value ) {
+       *value = 0xffff;
        return efipci_read ( pci,
                             EFIPCI_LOCATION ( where, EFIPCI_WIDTH_WORD ),
                             value );
@@ -89,6 +91,7 @@ static inline __always_inline int
 PCIAPI_INLINE ( efi, pci_read_config_dword ) ( struct pci_device *pci,
                                               unsigned int where,
                                               uint32_t *value ) {
+       *value = 0xffffffffUL;
        return efipci_read ( pci,
                             EFIPCI_LOCATION ( where, EFIPCI_WIDTH_DWORD ),
                             value );