From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 8084EA0C4B; Tue, 9 Nov 2021 11:07:31 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 0754640E28; Tue, 9 Nov 2021 11:07:31 +0100 (CET) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by mails.dpdk.org (Postfix) with ESMTP id 8056E4068B for ; Tue, 9 Nov 2021 11:07:29 +0100 (CET) X-IronPort-AV: E=McAfee;i="6200,9189,10162"; a="212447439" X-IronPort-AV: E=Sophos;i="5.87,219,1631602800"; d="scan'208";a="212447439" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Nov 2021 02:07:28 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.87,219,1631602800"; d="scan'208";a="491605242" Received: from silpixa00400884.ir.intel.com ([10.243.22.82]) by orsmga007.jf.intel.com with ESMTP; 09 Nov 2021 02:07:27 -0800 From: Radu Nicolau To: Radu Nicolau , Akhil Goyal Cc: dev@dpdk.org Date: Tue, 9 Nov 2021 09:51:40 +0000 Message-Id: <20211109095140.3888643-1-radu.nicolau@intel.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-dev] [PATCH] examples/ipsec-secgw: fix memory leaks X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Free telemetry structures when memory allocation or input parameter errors occur. Fixes: 3e7b7dd88021 ("examples/ipsec-secgw: support telemetry") Signed-off-by: Radu Nicolau --- examples/ipsec-secgw/ipsec-secgw.c | 65 ++++++++++++++++++++++-------- 1 file changed, 49 insertions(+), 16 deletions(-) diff --git a/examples/ipsec-secgw/ipsec-secgw.c b/examples/ipsec-secgw/ipsec-secgw.c index 0a1c5bcaaa..564d7981e5 100644 --- a/examples/ipsec-secgw/ipsec-secgw.c +++ b/examples/ipsec-secgw/ipsec-secgw.c @@ -3025,12 +3025,14 @@ handle_telemetry_cmd_ipsec_secgw_stats_outbound(const char *cmd __rte_unused, struct rte_tel_data *spd4_data = rte_tel_data_alloc(); struct rte_tel_data *spd6_data = rte_tel_data_alloc(); struct rte_tel_data *sad_data = rte_tel_data_alloc(); - unsigned int coreid = UINT32_MAX; + int rc = 0; /* verify allocated telemetry data structures */ - if (!spd4_data || !spd6_data || !sad_data) - return -ENOMEM; + if (!spd4_data || !spd6_data || !sad_data) { + rc = -ENOMEM; + goto exit; + } /* initialize telemetry data structs as dicts */ rte_tel_data_start_dict(data); @@ -3041,8 +3043,10 @@ handle_telemetry_cmd_ipsec_secgw_stats_outbound(const char *cmd __rte_unused, if (params) { coreid = (uint32_t)atoi(params); - if (rte_lcore_is_enabled(coreid) == 0) - return -EINVAL; + if (rte_lcore_is_enabled(coreid) == 0) { + rc = -EINVAL; + goto exit; + } } update_statistics(&total_stats, coreid); @@ -3076,7 +3080,13 @@ handle_telemetry_cmd_ipsec_secgw_stats_outbound(const char *cmd __rte_unused, rte_tel_data_add_dict_container(data, "sad", sad_data, 0); - return 0; +exit: + if (rc) { + rte_tel_data_free(spd4_data); + rte_tel_data_free(spd6_data); + rte_tel_data_free(sad_data); + } + return rc; } static int @@ -3088,12 +3098,14 @@ handle_telemetry_cmd_ipsec_secgw_stats_inbound(const char *cmd __rte_unused, struct rte_tel_data *spd4_data = rte_tel_data_alloc(); struct rte_tel_data *spd6_data = rte_tel_data_alloc(); struct rte_tel_data *sad_data = rte_tel_data_alloc(); - unsigned int coreid = UINT32_MAX; + int rc = 0; /* verify allocated telemetry data structures */ - if (!spd4_data || !spd6_data || !sad_data) - return -ENOMEM; + if (!spd4_data || !spd6_data || !sad_data) { + rc = -ENOMEM; + goto exit; + } /* initialize telemetry data structs as dicts */ rte_tel_data_start_dict(data); @@ -3105,8 +3117,10 @@ handle_telemetry_cmd_ipsec_secgw_stats_inbound(const char *cmd __rte_unused, if (params) { coreid = (uint32_t)atoi(params); - if (rte_lcore_is_enabled(coreid) == 0) - return -EINVAL; + if (rte_lcore_is_enabled(coreid) == 0) { + rc = -EINVAL; + goto exit; + } } update_statistics(&total_stats, coreid); @@ -3140,7 +3154,13 @@ handle_telemetry_cmd_ipsec_secgw_stats_inbound(const char *cmd __rte_unused, rte_tel_data_add_dict_container(data, "spd6", spd6_data, 0); - return 0; +exit: + if (rc) { + rte_tel_data_free(spd4_data); + rte_tel_data_free(spd6_data); + rte_tel_data_free(sad_data); + } + return rc; } static int @@ -3151,8 +3171,14 @@ handle_telemetry_cmd_ipsec_secgw_stats_routing(const char *cmd __rte_unused, struct rte_tel_data *lpm4_data = rte_tel_data_alloc(); struct rte_tel_data *lpm6_data = rte_tel_data_alloc(); - unsigned int coreid = UINT32_MAX; + int rc = 0; + + /* verify allocated telemetry data structures */ + if (!lpm4_data || !lpm6_data) { + rc = -ENOMEM; + goto exit; + } /* initialize telemetry data structs as dicts */ rte_tel_data_start_dict(data); @@ -3162,8 +3188,10 @@ handle_telemetry_cmd_ipsec_secgw_stats_routing(const char *cmd __rte_unused, if (params) { coreid = (uint32_t)atoi(params); - if (rte_lcore_is_enabled(coreid) == 0) - return -EINVAL; + if (rte_lcore_is_enabled(coreid) == 0) { + rc = -EINVAL; + goto exit; + } } update_statistics(&total_stats, coreid); @@ -3180,7 +3208,12 @@ handle_telemetry_cmd_ipsec_secgw_stats_routing(const char *cmd __rte_unused, rte_tel_data_add_dict_container(data, "IPv6 LPM", lpm6_data, 0); - return 0; +exit: + if (rc) { + rte_tel_data_free(lpm4_data); + rte_tel_data_free(lpm6_data); + } + return rc; } static void -- 2.25.1