mem: fix potential resource leak on alloc
authorAnatoly Burakov <anatoly.burakov@intel.com>
Mon, 16 Apr 2018 15:37:03 +0000 (16:37 +0100)
committerThomas Monjalon <thomas@monjalon.net>
Fri, 27 Apr 2018 21:42:40 +0000 (23:42 +0200)
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")

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
lib/librte_eal/linuxapp/eal/eal_memalloc.c

index f369297..6f0eda5 100644 (file)
@@ -522,13 +522,14 @@ resized:
                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);