mem: fix hugepage resource leak
authorDaniel Mrzyglod <danielx.t.mrzyglod@intel.com>
Wed, 6 Jul 2016 10:44:53 +0000 (12:44 +0200)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Sun, 10 Jul 2016 13:27:39 +0000 (15:27 +0200)
Current code does not munmap 'hugepage' mapping (hugepage info file) on
function exit, leaking resources.

Coverity issue: 97920
Fixes: b6a468ad41d5 ("memory: add --socket-mem option")

Signed-off-by: Daniel Mrzyglod <danielx.t.mrzyglod@intel.com>
Acked-by: Sergio Gonzalez Monroy <sergio.gonzalez.monroy@intel.com>
lib/librte_eal/linuxapp/eal/eal_memory.c

index 5578c25..b663244 100644 (file)
@@ -1136,7 +1136,7 @@ int
 rte_eal_hugepage_init(void)
 {
        struct rte_mem_config *mcfg;
-       struct hugepage_file *hugepage, *tmp_hp = NULL;
+       struct hugepage_file *hugepage = NULL, *tmp_hp = NULL;
        struct hugepage_info used_hp[MAX_HUGEPAGE_SIZES];
 
        uint64_t memory[RTE_MAX_NUMA_NODES];
@@ -1479,14 +1479,19 @@ rte_eal_hugepage_init(void)
                        "of memory.\n",
                        i, nr_hugefiles, RTE_STR(CONFIG_RTE_MAX_MEMSEG),
                        RTE_MAX_MEMSEG);
-               return -ENOMEM;
+               goto fail;
        }
 
+       munmap(hugepage, nr_hugefiles * sizeof(struct hugepage_file));
+
        return 0;
 
 fail:
        huge_recover_sigbus();
        free(tmp_hp);
+       if (hugepage != NULL)
+               munmap(hugepage, nr_hugefiles * sizeof(struct hugepage_file));
+
        return -1;
 }