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