We were closing descriptor before checking if mapping has failed, but if it did, we did a second close afterwards. Fix it by moving closing descriptor to after we check if mmap has succeeded.
Coverity issue: 272560 Fixes: 2a04139f66b4 ("eal: add single file segments option") Cc: anatoly.bura...@intel.com Signed-off-by: Anatoly Burakov <anatoly.bura...@intel.com> --- lib/librte_eal/linuxapp/eal/eal_memalloc.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/librte_eal/linuxapp/eal/eal_memalloc.c b/lib/librte_eal/linuxapp/eal/eal_memalloc.c index 1f553dd..9156f8b 100644 --- a/lib/librte_eal/linuxapp/eal/eal_memalloc.c +++ b/lib/librte_eal/linuxapp/eal/eal_memalloc.c @@ -458,9 +458,6 @@ alloc_seg(struct rte_memseg *ms, void *addr, int socket_id, */ void *va = mmap(addr, alloc_sz, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_POPULATE | MAP_FIXED, fd, map_offset); - /* for non-single file segments, we can close fd here */ - if (!internal_config.single_file_segments) - close(fd); if (va == MAP_FAILED) { RTE_LOG(DEBUG, EAL, "%s(): mmap() failed: %s\n", __func__, @@ -471,6 +468,9 @@ alloc_seg(struct rte_memseg *ms, void *addr, int socket_id, RTE_LOG(DEBUG, EAL, "%s(): wrong mmap() address\n", __func__); goto mapped; } + /* for non-single file segments, we can close fd here */ + if (!internal_config.single_file_segments) + close(fd); rte_iova_t iova = rte_mem_virt2iova(addr); if (iova == RTE_BAD_PHYS_ADDR) { -- 2.7.4