Several cleanup paths guard close() with "fd > 0", which skips a valid
file descriptor of 0 and leaks it. A descriptor of 0 is legitimate (for
example when stdin has been closed before the region or interrupt fd is
created). Use ">= 0" consistently with the -1 sentinel the code already
uses elsewhere, in memif_free_regions(), the memif_region_init_shm()
error path, the control-channel teardown in memif_disconnect(), and the
SCM_RIGHTS fd check in memif_msg_send().

Fixes: 09c7e63a71f9 ("net/memif: introduce memory interface PMD")
Cc: [email protected]

Signed-off-by: Sriram Yagnaraman <[email protected]>
---
 drivers/net/memif/memif_socket.c  | 8 ++++----
 drivers/net/memif/rte_eth_memif.c | 6 +++---
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/drivers/net/memif/memif_socket.c b/drivers/net/memif/memif_socket.c
index 8231a936e5..5918406271 100644
--- a/drivers/net/memif/memif_socket.c
+++ b/drivers/net/memif/memif_socket.c
@@ -41,7 +41,7 @@ memif_msg_send(int fd, memif_msg_t *msg, int afd)
        mh.msg_iov = iov;
        mh.msg_iovlen = 1;
 
-       if (afd > 0) {
+       if (afd >= 0) {
                memset(&ctl, 0, sizeof(ctl));
                mh.msg_control = ctl;
                mh.msg_controllen = sizeof(ctl);
@@ -624,7 +624,7 @@ memif_disconnect(struct rte_eth_dev *dev)
                }
 
                ih = pmd->cc->intr_handle;
-               if (rte_intr_fd_get(ih) > 0) {
+               if (rte_intr_fd_get(ih) >= 0) {
                        ret = rte_intr_callback_unregister(ih,
                                                        memif_intr_handler,
                                                        pmd->cc);
@@ -664,7 +664,7 @@ memif_disconnect(struct rte_eth_dev *dev)
                                continue;
                }
 
-               if (rte_intr_fd_get(mq->intr_handle) > 0) {
+               if (rte_intr_fd_get(mq->intr_handle) >= 0) {
                        close(rte_intr_fd_get(mq->intr_handle));
                        rte_intr_fd_set(mq->intr_handle, -1);
                }
@@ -682,7 +682,7 @@ memif_disconnect(struct rte_eth_dev *dev)
                                continue;
                }
 
-               if (rte_intr_fd_get(mq->intr_handle) > 0) {
+               if (rte_intr_fd_get(mq->intr_handle) >= 0) {
                        close(rte_intr_fd_get(mq->intr_handle));
                        rte_intr_fd_set(mq->intr_handle, -1);
                }
diff --git a/drivers/net/memif/rte_eth_memif.c 
b/drivers/net/memif/rte_eth_memif.c
index 5e28db782d..24a44d94d7 100644
--- a/drivers/net/memif/rte_eth_memif.c
+++ b/drivers/net/memif/rte_eth_memif.c
@@ -1290,12 +1290,12 @@ memif_free_regions(struct rte_eth_dev *dev)
                        /* This is memzone */
                        if (i > 0 && (pmd->flags & ETH_MEMIF_FLAG_ZERO_COPY)) {
                                r->addr = NULL;
-                               if (r->fd > 0)
+                               if (r->fd >= 0)
                                        close(r->fd);
                        }
                        if (r->addr != NULL) {
                                munmap(r->addr, r->region_size);
-                               if (r->fd > 0) {
+                               if (r->fd >= 0) {
                                        close(r->fd);
                                        r->fd = -1;
                                }
@@ -1416,7 +1416,7 @@ memif_region_init_shm(struct rte_eth_dev *dev, uint8_t 
has_buffers)
        return ret;
 
 error:
-       if (r->fd > 0)
+       if (r->fd >= 0)
                close(r->fd);
        r->fd = -1;
 
-- 
2.43.7

Reply via email to