On 4/11/2020 12:24 PM, wangyunjian wrote: > From: Yunjian Wang <[email protected]> > > When eth_dev_tap_create() is failed, nlsk_fd and ka_fd won't be closed > thus leading fds leak. Zero is a valid fd. Ultimately leads to a valid > fd was closed by mistake. > > Fixes: bf7b7f437b49 ("net/tap: create netdevice during probing") > Fixes: cb7e68da630a ("net/tap: fix cleanup on allocation failure") > CC: [email protected] > > Signed-off-by: Yunjian Wang <[email protected]> > --- > drivers/net/tap/rte_eth_tap.c | 9 +++++++-- > 1 file changed, 7 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c > index 829a9e9b4..9bea5d9d0 100644 > --- a/drivers/net/tap/rte_eth_tap.c > +++ b/drivers/net/tap/rte_eth_tap.c > @@ -1820,6 +1820,8 @@ eth_dev_tap_create(struct rte_vdev_device *vdev, const > char *tap_name, > pmd->dev = dev; > strlcpy(pmd->name, tap_name, sizeof(pmd->name)); > pmd->type = type; > + pmd->ka_fd = -1; > + pmd->nlsk_fd = -1; > > pmd->ioctl_sock = socket(AF_INET, SOCK_DGRAM, 0); > if (pmd->ioctl_sock == -1) { > @@ -1850,7 +1852,6 @@ eth_dev_tap_create(struct rte_vdev_device *vdev, const > char *tap_name, > dev->intr_handle = &pmd->intr_handle; > > /* Presetup the fds to -1 as being not valid */ > - pmd->ka_fd = -1; > for (i = 0; i < RTE_PMD_TAP_MAX_QUEUES; i++) { > process_private->rxq_fds[i] = -1; > process_private->txq_fds[i] = -1; > @@ -1990,7 +1991,11 @@ eth_dev_tap_create(struct rte_vdev_device *vdev, const > char *tap_name, > tap_flow_implicit_flush(pmd, NULL); > > error_exit: > - if (pmd->ioctl_sock > 0) > + if (pmd->nlsk_fd == -1) > + close(pmd->nlsk_fd);
Shouldn't this be '!=', "pmd->nlsk_fd != -1"?

