Normally, tailq entry should have a valid fd by the time we attempt to map the segment. However, in case it doesn't, we're leaking fd, so fix it.
Coverity issue: 272570 Fixes: 2a04139f66b4 ("eal: add single file segments option") Cc: anatoly.bura...@intel.com Signed-off-by: Anatoly Burakov <anatoly.bura...@intel.com> --- Notes: v4: - Unconditionally close fd on remove - Clarify what happens if file is not removed lib/librte_eal/linuxapp/eal/eal_memalloc.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/librte_eal/linuxapp/eal/eal_memalloc.c b/lib/librte_eal/linuxapp/eal/eal_memalloc.c index 5ea6dd3..d366f0a 100644 --- a/lib/librte_eal/linuxapp/eal/eal_memalloc.c +++ b/lib/librte_eal/linuxapp/eal/eal_memalloc.c @@ -522,13 +522,14 @@ alloc_seg(struct rte_memseg *ms, void *addr, int socket_id, resize_hugefile(fd, map_offset, alloc_sz, false); if (is_zero_length(fd)) { struct msl_entry *te = get_msl_entry_by_idx(list_idx); - if (te != NULL && te->fd >= 0) { - close(te->fd); + /* te->fd is equivalent to fd */ + if (te != NULL && te->fd >= 0) te->fd = -1; - } /* ignore errors, can't make it any worse */ unlink(path); + close(fd); } + /* if we're not removing the file, fd stays in the tailq */ } else { close(fd); unlink(path); -- 2.7.4