forked from mirrors/linux
		
	PCI: Check for pci_setup_device() failure in pci_iov_add_virtfn()
If pci_setup_device() returns failure, we must return failure from pci_iov_add_virtfn(). If we ignore the failure and continue with an uninitialized pci_dev for virtfn, we crash later when we try to use those uninitialized parts. Signed-off-by: Po Liu <po.liu@nxp.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
This commit is contained in:
		
							parent
							
								
									8e2e031799
								
							
						
					
					
						commit
						156c55325d
					
				
					 1 changed files with 4 additions and 1 deletions
				
			
		| 
						 | 
					@ -136,7 +136,10 @@ int pci_iov_add_virtfn(struct pci_dev *dev, int id, int reset)
 | 
				
			||||||
	virtfn->devfn = pci_iov_virtfn_devfn(dev, id);
 | 
						virtfn->devfn = pci_iov_virtfn_devfn(dev, id);
 | 
				
			||||||
	virtfn->vendor = dev->vendor;
 | 
						virtfn->vendor = dev->vendor;
 | 
				
			||||||
	pci_read_config_word(dev, iov->pos + PCI_SRIOV_VF_DID, &virtfn->device);
 | 
						pci_read_config_word(dev, iov->pos + PCI_SRIOV_VF_DID, &virtfn->device);
 | 
				
			||||||
	pci_setup_device(virtfn);
 | 
						rc = pci_setup_device(virtfn);
 | 
				
			||||||
 | 
						if (rc)
 | 
				
			||||||
 | 
							goto failed0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	virtfn->dev.parent = dev->dev.parent;
 | 
						virtfn->dev.parent = dev->dev.parent;
 | 
				
			||||||
	virtfn->physfn = pci_dev_get(dev);
 | 
						virtfn->physfn = pci_dev_get(dev);
 | 
				
			||||||
	virtfn->is_virtfn = 1;
 | 
						virtfn->is_virtfn = 1;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue