mem: fix potential resource leak on freeing
authorAnatoly Burakov <anatoly.burakov@intel.com>
Mon, 16 Apr 2018 15:31:08 +0000 (16:31 +0100)
committerThomas Monjalon <thomas@monjalon.net>
Fri, 27 Apr 2018 21:42:40 +0000 (23:42 +0200)
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 <anatoly.burakov@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
lib/librte_eal/linuxapp/eal/eal_memalloc.c

index f48d10d..f369297 100644 (file)
@@ -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