memzone: fix leak on allocation error
authorAnatoly Burakov <anatoly.burakov@intel.com>
Thu, 21 Dec 2017 18:07:07 +0000 (18:07 +0000)
committerThomas Monjalon <thomas@monjalon.net>
Fri, 12 Jan 2018 14:38:29 +0000 (15:38 +0100)
We check if there's space in config after we allocated the memzone,
but if there isn't, we never free it back. This patch adds memzone
free if there's no room in memzone config.

Fixes: ff909fe21f0a ("mem: introduce memzone freeing")
Cc: stable@dpdk.org
Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
lib/librte_eal/common/eal_common_memzone.c

index d26e385..1ab3ade 100644 (file)
@@ -208,7 +208,7 @@ memzone_reserve_aligned_thread_unsafe(const char *name, size_t len,
                return NULL;
        }
 
-       const struct malloc_elem *elem = malloc_elem_from_data(mz_addr);
+       struct malloc_elem *elem = malloc_elem_from_data(mz_addr);
 
        /* fill the zone in config */
        mz = get_next_free_memzone();
@@ -216,6 +216,7 @@ memzone_reserve_aligned_thread_unsafe(const char *name, size_t len,
        if (mz == NULL) {
                RTE_LOG(ERR, EAL, "%s(): Cannot find free memzone but there is room "
                                "in config!\n", __func__);
+               malloc_elem_free(elem);
                rte_errno = ENOSPC;
                return NULL;
        }