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 6E80EA0032 for ; Wed, 20 Jul 2022 05:13:33 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 47D5340A7A; Wed, 20 Jul 2022 05:13:33 +0200 (CEST) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by mails.dpdk.org (Postfix) with ESMTP id 296A640697 for ; Wed, 20 Jul 2022 05:13:31 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1658286812; x=1689822812; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=188RIPIdug1rI47BQisOI6uCntG39EUbYWT+R60gjH0=; b=eMEIAjq0ZjOOAeIvPGaPktLLV41wWMXOkaoaENqjy7PqDTvSDzta6wBm 7tc0R+KuDmS2P8qx3yG5g6WHE++KVkzlYx+Ll8E96/7fIC0YhuL/GJcD8 talmQ39rGSweEXa8NLjrrIW2sAWJdPM/CqehnHiqZNjJh1Y320bGeQAJg LlfPz1u+vW9y0XjcaiImupmw+RM4DSEB1SntJKduqKrYW7srSccNLx5nM 13TY1Tr/c/uR2XXxaH0OInxiFymqYGOnsAs6ubmTopWpbhRAVuKBLEPWu VljqTJLR0bTNOuCfwYD1g1xIk2yjS1MY6W2OkTA0QdrZWj6cpTWmDhagC w==; X-IronPort-AV: E=McAfee;i="6400,9594,10413"; a="285431768" X-IronPort-AV: E=Sophos;i="5.92,285,1650956400"; d="scan'208";a="285431768" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Jul 2022 20:13:31 -0700 X-IronPort-AV: E=Sophos;i="5.92,285,1650956400"; d="scan'208";a="656071758" Received: from unknown (HELO localhost.localdomain) ([10.239.252.104]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Jul 2022 20:13:29 -0700 From: Ke Zhang To: stable@dpdk.org Cc: Ke Zhang , Yuying Zhang , Ferruh Yigit Subject: [PATCH 19.11] app/testpmd: fix multicast address pool leak Date: Wed, 20 Jul 2022 11:05:07 +0800 Message-Id: <20220720030507.207811-1-ke1x.zhang@intel.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org [ upstream commit "68629be3a622ee53cd5b40c8447ae9b083ff3f6c" ] A multicast address pool is allocated for a port when using mcast_addr testpmd commands. When closing a port or stopping testpmd, this pool was not freed, resulting in a leak. This issue has been caught using ASan. Free this pool when closing the port. Error info as following: ERROR: LeakSanitizer: detected memory leaksDirect leak of 192 byte(s) 0 0x7f6a2e0aeffe in __interceptor_realloc (/lib/x86_64-linux-gnu/libasan.so.5+0x10dffe) 1 0x565361eb340f in mcast_addr_pool_extend ../app/test-pmd/config.c:5162 2 0x565361eb3556 in mcast_addr_pool_append ../app/test-pmd/config.c:5180 3 0x565361eb3aae in mcast_addr_add ../app/test-pmd/config.c:5243 Fixes: 8fff667578a7 ("app/testpmd: new command to add/remove multicast MAC addresses") Cc: stable@dpdk.org Signed-off-by: Ke Zhang Acked-by: Yuying Zhang Acked-by: Ferruh Yigit --- app/test-pmd/config.c | 19 +++++++++++++++++++ app/test-pmd/testpmd.c | 1 + app/test-pmd/testpmd.h | 1 + 3 files changed, 21 insertions(+) diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index 3eefc90bf..995fd3b38 100644 --- a/app/test-pmd/config.c +++ b/app/test-pmd/config.c @@ -3996,6 +3996,25 @@ mcast_addr_pool_remove(struct rte_port *port, uint32_t addr_idx) sizeof(struct rte_ether_addr) * (port->mc_addr_nb - addr_idx)); } +int +mcast_addr_pool_destroy(portid_t port_id) +{ + struct rte_port *port; + + if (port_id_is_invalid(port_id, ENABLED_WARN) || + port_id == (portid_t)RTE_PORT_ALL) + return -EINVAL; + port = &ports[port_id]; + + if (port->mc_addr_nb != 0) { + /* free the pool of multicast addresses. */ + free(port->mc_addr_pool); + port->mc_addr_pool = NULL; + port->mc_addr_nb = 0; + } + return 0; +} + static int eth_port_multicast_addr_list_set(portid_t port_id) { diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index cb59c85c8..523f48c97 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -2612,6 +2612,7 @@ close_port(portid_t pid) if (port->flow_list) port_flow_flush(pi); + mcast_addr_pool_destroy(pi); rte_eth_dev_close(pi); remove_invalid_ports(); diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index 244b0c710..ac18bc394 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -733,6 +733,7 @@ int port_flow_create(portid_t port_id, const struct rte_flow_attr *attr, const struct rte_flow_item *pattern, const struct rte_flow_action *actions); +int mcast_addr_pool_destroy(portid_t port_id); int port_flow_destroy(portid_t port_id, uint32_t n, const uint32_t *rule); int port_flow_flush(portid_t port_id); int port_flow_query(portid_t port_id, uint32_t rule, -- 2.25.1