Author: cem
Date: Tue Dec 13 19:58:21 2016
New Revision: 310031
URL: https://svnweb.freebsd.org/changeset/base/310031

Log:
  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

Modified:
  head/sys/compat/linuxkpi/common/include/linux/pci.h

Modified: head/sys/compat/linuxkpi/common/include/linux/pci.h
==============================================================================
--- head/sys/compat/linuxkpi/common/include/linux/pci.h Tue Dec 13 19:36:05 
2016        (r310030)
+++ head/sys/compat/linuxkpi/common/include/linux/pci.h Tue Dec 13 19:58:21 
2016        (r310031)
@@ -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
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to