This patch fixes coverity issue by adding a check for negative
event fd value.

Coverity issue: 373722,373721,373709,373702,373696
Fixes: d61138d4f0e2 ("drivers: remove direct access to interrupt handle")

Signed-off-by: Harman Kalra <hka...@marvell.com>
---
 drivers/bus/pci/linux/pci_vfio.c |  6 ++++++
 drivers/net/memif/memif_socket.c |  3 +++
 drivers/net/tap/rte_eth_tap.c    | 11 +++++++----
 3 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/drivers/bus/pci/linux/pci_vfio.c b/drivers/bus/pci/linux/pci_vfio.c
index 779525aa3e..1a5e7c2d2a 100644
--- a/drivers/bus/pci/linux/pci_vfio.c
+++ b/drivers/bus/pci/linux/pci_vfio.c
@@ -1028,6 +1028,9 @@ pci_vfio_unmap_resource_primary(struct rte_pci_device 
*dev)
        }
 
        vfio_dev_fd = rte_intr_dev_fd_get(dev->intr_handle);
+       if (vfio_dev_fd < 0)
+               return -1;
+
        if (pci_vfio_set_bus_master(vfio_dev_fd, false)) {
                RTE_LOG(ERR, EAL, "%s cannot unset bus mastering for PCI 
device!\n",
                                pci_addr);
@@ -1071,6 +1074,9 @@ pci_vfio_unmap_resource_secondary(struct rte_pci_device 
*dev)
                        loc->domain, loc->bus, loc->devid, loc->function);
 
        vfio_dev_fd = rte_intr_dev_fd_get(dev->intr_handle);
+       if (vfio_dev_fd < 0)
+               return -1;
+
        ret = rte_vfio_release_device(rte_pci_get_sysfs_path(), pci_addr,
                                      vfio_dev_fd);
        if (ret < 0) {
diff --git a/drivers/net/memif/memif_socket.c b/drivers/net/memif/memif_socket.c
index c845c20ccf..079cf01269 100644
--- a/drivers/net/memif/memif_socket.c
+++ b/drivers/net/memif/memif_socket.c
@@ -65,6 +65,9 @@ memif_msg_send_from_queue(struct memif_control_channel *cc)
        if (e == NULL)
                return 0;
 
+       if (rte_intr_fd_get(cc->intr_handle) < 0)
+               return -1;
+
        size = memif_msg_send(rte_intr_fd_get(cc->intr_handle), &e->msg,
                              e->fd);
        if (size != sizeof(memif_msg_t)) {
diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c
index a9a7658147..1b7d34e8a0 100644
--- a/drivers/net/tap/rte_eth_tap.c
+++ b/drivers/net/tap/rte_eth_tap.c
@@ -1663,8 +1663,9 @@ tap_dev_intr_handler(void *cb_arg)
        struct rte_eth_dev *dev = cb_arg;
        struct pmd_internals *pmd = dev->data->dev_private;
 
-       tap_nl_recv(rte_intr_fd_get(pmd->intr_handle),
-                   tap_nl_msg_handler, dev);
+       if (rte_intr_fd_get(pmd->intr_handle) >= 0)
+               tap_nl_recv(rte_intr_fd_get(pmd->intr_handle),
+                           tap_nl_msg_handler, dev);
 }
 
 static int
@@ -1703,8 +1704,10 @@ tap_lsc_intr_handle_set(struct rte_eth_dev *dev, int set)
                }
        } while (true);
 
-       tap_nl_final(rte_intr_fd_get(pmd->intr_handle));
-       rte_intr_fd_set(pmd->intr_handle, -1);
+       if (rte_intr_fd_get(pmd->intr_handle) >= 0) {
+               tap_nl_final(rte_intr_fd_get(pmd->intr_handle));
+               rte_intr_fd_set(pmd->intr_handle, -1);
+       }
 
        return 0;
 }
-- 
2.18.0

Reply via email to