mirror of https://github.com/ipxe/ipxe.git
				
				
				
			[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>pull/594/head
							parent
							
								
									5d22307c41
								
							
						
					
					
						commit
						04288974f6
					
				| 
						 | 
				
			
			@ -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 ) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue