linuxkpi: Fix not-found case of linux_pci_find_irq_dev

Linux list_for_each_entry() does not neccessarily end with the iterator
NULL (it may be an offset from NULL if the list member is not the first
element of the member struct).

Reported by:	Coverity
CID:		1366940
Reviewed by:	hselasky@
Sponsored by:	Dell EMC Isilon
Differential Revision:	https://reviews.freebsd.org/D8780
This commit is contained in:
Conrad Meyer 2016-12-13 19:58:21 +00:00
parent ca311cf72b
commit 2f02a9e15a

View File

@ -220,18 +220,19 @@ static inline struct device *
linux_pci_find_irq_dev(unsigned int irq)
{
struct pci_dev *pdev;
struct device *found;
found = NULL;
spin_lock(&pci_lock);
list_for_each_entry(pdev, &pci_devices, links) {
if (irq == pdev->dev.irq)
break;
if (irq >= pdev->dev.msix && irq < pdev->dev.msix_max)
if (irq == pdev->dev.irq ||
(irq >= pdev->dev.msix && irq < pdev->dev.msix_max)) {
found = &pdev->dev;
break;
}
}
spin_unlock(&pci_lock);
if (pdev)
return &pdev->dev;
return (NULL);
return (found);
}
static inline unsigned long