net/tap: fix unregistering callback with invalid fd
authorVipin Varghese <vipin.varghese@intel.com>
Mon, 18 Sep 2017 18:47:35 +0000 (19:47 +0100)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 6 Oct 2017 00:49:49 +0000 (02:49 +0200)
tap_intr_handle_set() called by tap_dev_start(), and if LSC is disabled
(dev_conf.intr_conf.lsc == 0), it tries to unregister interrupt
callback without checking the interrupt file descriptor.

Fixes: c0bddd3a057f ("net/tap: add link status notification")
Cc: stable@dpdk.org
Signed-off-by: Vipin Varghese <vipin.varghese@intel.com>
Acked-by: Pascal Mazon <pascal.mazon@6wind.com>
drivers/net/tap/rte_eth_tap.c

index d926d4b..52380b4 100644 (file)
@@ -1132,10 +1132,11 @@ tap_intr_handle_set(struct rte_eth_dev *dev, int set)
 
        /* In any case, disable interrupt if the conf is no longer there. */
        if (!dev->data->dev_conf.intr_conf.lsc) {
-               if (pmd->intr_handle.fd != -1)
+               if (pmd->intr_handle.fd != -1) {
                        nl_final(pmd->intr_handle.fd);
-               rte_intr_callback_unregister(
-                       &pmd->intr_handle, tap_dev_intr_handler, dev);
+                       rte_intr_callback_unregister(&pmd->intr_handle,
+                               tap_dev_intr_handler, dev);
+               }
                return 0;
        }
        if (set) {