From b48f859a0397225f5484fd9fd78a3b6567e12f77 Mon Sep 17 00:00:00 2001 From: Anatoly Burakov Date: Mon, 16 Apr 2018 16:31:08 +0100 Subject: [PATCH] mem: fix potential resource leak on freeing We close fd if we managed to find it in the list of allocated segment lists (which should always be the case under normal conditions), but if we didn't, the fd was leaking. Close it if we couldn't find it in the segment list. This is not an issue as if the segment is zero length, we're getting rid of it anyway, so there's no harm in not storing the fd anywhere. Coverity issue: 272568 Fixes: 2a04139f66b4 ("eal: add single file segments option") Signed-off-by: Anatoly Burakov Acked-by: Bruce Richardson --- 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 f48d10dcac..f36929760b 100644 --- a/lib/librte_eal/linuxapp/eal/eal_memalloc.c +++ b/lib/librte_eal/linuxapp/eal/eal_memalloc.c @@ -567,12 +567,13 @@ free_seg(struct rte_memseg *ms, struct hugepage_info *hi, */ 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; - } unlink(path); + close(fd); } + /* if we're not removing the file, fd stays in the tailq */ ret = 0; } else { /* if we're able to take out a write lock, we're the last one -- 2.20.1