net/af_packet: fix check of file descriptors
authorYunjian Wang <wangyunjian@huawei.com>
Mon, 6 Jul 2020 12:27:32 +0000 (20:27 +0800)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 17 Jul 2020 16:21:21 +0000 (18:21 +0200)
Zero is a valid fd. It will fail to check the fd if the fd is zero.

Fixes: 527740ccfaec ("af_packet: fix some leaks")
Cc: stable@dpdk.org
Signed-off-by: Yunjian Wang <wangyunjian@huawei.com>
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
drivers/net/af_packet/rte_eth_af_packet.c

index e1e7f39..db5de8e 100644 (file)
@@ -645,6 +645,8 @@ rte_pmd_init_internals(struct rte_vdev_device *dev,
        for (q = 0; q < nb_queues; q++) {
                (*internals)->rx_queue[q].map = MAP_FAILED;
                (*internals)->tx_queue[q].map = MAP_FAILED;
+               (*internals)->rx_queue[q].sockfd = -1;
+               (*internals)->tx_queue[q].sockfd = -1;
        }
 
        req = &((*internals)->req);
@@ -848,7 +850,7 @@ error:
 
                rte_free((*internals)->rx_queue[q].rd);
                rte_free((*internals)->tx_queue[q].rd);
-               if (((*internals)->rx_queue[q].sockfd != 0) &&
+               if (((*internals)->rx_queue[q].sockfd >= 0) &&
                        ((*internals)->rx_queue[q].sockfd != qsockfd))
                        close((*internals)->rx_queue[q].sockfd);
        }