From da9ac508c3b77c83c201dd01d7736ccf139d1767 Mon Sep 17 00:00:00 2001 From: Harry van Haaren Date: Wed, 24 Jan 2018 17:02:47 +0000 Subject: [PATCH 1/1] service: fix possible mem leak on initialize This commit ensures that if that if we run out of memory during the initialization of the service library, that the first allocated memory is correctly freed instead of leaked. Fixes: 21698354c832 ("service: introduce service cores concept") Cc: stable@dpdk.org Reported-by: Vipin Varghese Signed-off-by: Harry van Haaren --- lib/librte_eal/common/rte_service.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/librte_eal/common/rte_service.c b/lib/librte_eal/common/rte_service.c index 5f97d85175..b40c3d97f2 100644 --- a/lib/librte_eal/common/rte_service.c +++ b/lib/librte_eal/common/rte_service.c @@ -82,14 +82,14 @@ int32_t rte_service_init(void) RTE_CACHE_LINE_SIZE); if (!rte_services) { printf("error allocating rte services array\n"); - return -ENOMEM; + goto fail_mem; } lcore_states = rte_calloc("rte_service_core_states", RTE_MAX_LCORE, sizeof(struct core_state), RTE_CACHE_LINE_SIZE); if (!lcore_states) { printf("error allocating core states array\n"); - return -ENOMEM; + goto fail_mem; } int i; @@ -106,6 +106,12 @@ int32_t rte_service_init(void) rte_service_library_initialized = 1; return 0; +fail_mem: + if (rte_services) + rte_free(rte_services); + if (lcore_states) + rte_free(lcore_states); + return -ENOMEM; } /* returns 1 if service is registered and has not been unregistered -- 2.20.1