[PATCH v3 3/9] net/memif: do not close EAL-owned memseg file descriptor
Sriram Yagnaraman
sriram.yagnaraman at ericsson.com
Fri Oct 16 16:15:51 CEST 2026
In zero-copy mode the per-memseg regions (i > 0) take their fd from
rte_memseg_get_fd(), which rte_memory.h documents as EAL-internal and
read-only. Both memif_connect() and memif_free_regions() closed that fd,
so the next connect handed the peer a stale (possibly reused)
descriptor and the PMD closed a descriptor it does not own. Stop closing
it in both paths and just clear the region fd; the fd is not ours.
Fixes: 43b815d88188 ("net/memif: support zero-copy slave")
Cc: stable at dpdk.org
Suggested-by: Stephen Hemminger <stephen at networkplumber.org>
Signed-off-by: Sriram Yagnaraman <sriram.yagnaraman at ericsson.com>
---
drivers/net/memif/rte_eth_memif.c | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/drivers/net/memif/rte_eth_memif.c b/drivers/net/memif/rte_eth_memif.c
index 1d1d12e242..e753243440 100644
--- a/drivers/net/memif/rte_eth_memif.c
+++ b/drivers/net/memif/rte_eth_memif.c
@@ -1289,9 +1289,9 @@ memif_free_regions(struct rte_eth_dev *dev)
if (r != NULL) {
/* This is memzone */
if (i > 0 && (pmd->flags & ETH_MEMIF_FLAG_ZERO_COPY)) {
+ /* memseg fd is owned by EAL, do not close */
r->addr = NULL;
- if (r->fd > 0)
- close(r->fd);
+ r->fd = -1;
}
if (r->addr != NULL) {
munmap(r->addr, r->region_size);
@@ -1611,8 +1611,7 @@ memif_connect(struct rte_eth_dev *dev)
}
}
if (i > 0 && (pmd->flags & ETH_MEMIF_FLAG_ZERO_COPY)) {
- /* close memseg file */
- close(mr->fd);
+ /* memseg fd is owned by EAL, do not close */
mr->fd = -1;
}
}
--
2.43.7
More information about the dev
mailing list