[dpdk-dev] [EXT] [PATCH] net/mvpp2: fix memory leak in error path

Liron Himi lironh at marvell.com
Thu Oct 22 08:40:59 CEST 2020


Acked-by: Liron Himi <lironh at marvell.com>

-----Original Message-----
From: wangyunjian <wangyunjian at huawei.com> 
Sent: Thursday, 22 October 2020 07:25
To: dev at dpdk.org
Cc: Liron Himi <lironh at marvell.com>; jerry.lilijun at huawei.com; xudingke at huawei.com; Yunjian Wang <wangyunjian at huawei.com>; stable at dpdk.org
Subject: [EXT] [dpdk-dev] [PATCH] net/mvpp2: fix memory leak in error path

External Email

----------------------------------------------------------------------
From: Yunjian Wang <wangyunjian at huawei.com>

In mrvl_create() allocated memory for 'mtr', we don't free it when profile get fails and it will lead to memory leak.

We can get profile at the beginning of the function to fix it, before calling mtr = rte_zmalloc_socket().

Fixes: cdb53f8da628 ("net/mvpp2: support metering")
Cc: stable at dpdk.org

Signed-off-by: Yunjian Wang <wangyunjian at huawei.com>
---
 drivers/net/mvpp2/mrvl_mtr.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/net/mvpp2/mrvl_mtr.c b/drivers/net/mvpp2/mrvl_mtr.c index 39272acea4..2fa5cb43ad 100644
--- a/drivers/net/mvpp2/mrvl_mtr.c
+++ b/drivers/net/mvpp2/mrvl_mtr.c
@@ -329,6 +329,12 @@ mrvl_create(struct rte_eth_dev *dev, uint32_t mtr_id,
 	struct mrvl_mtr_profile *profile;
 	struct mrvl_mtr *mtr;
 
+	profile = mrvl_mtr_profile_from_id(priv, params->meter_profile_id);
+	if (!profile)
+		return -rte_mtr_error_set(error, EINVAL,
+					  RTE_MTR_ERROR_TYPE_METER_PROFILE_ID,
+					  NULL, "Profile id does not exist\n");
+
 	mtr = mrvl_mtr_from_id(priv, mtr_id);
 	if (mtr)
 		return -rte_mtr_error_set(error, EEXIST, @@ -341,12 +347,6 @@ mrvl_create(struct rte_eth_dev *dev, uint32_t mtr_id,
 					  RTE_MTR_ERROR_TYPE_UNSPECIFIED,
 					  NULL, NULL);
 
-	profile = mrvl_mtr_profile_from_id(priv, params->meter_profile_id);
-	if (!profile)
-		return -rte_mtr_error_set(error, EINVAL,
-					  RTE_MTR_ERROR_TYPE_METER_PROFILE_ID,
-					  NULL, "Profile id does not exist\n");
-
 	mtr->shared = shared;
 	mtr->mtr_id = mtr_id;
 	mtr->plcr_bit = MRVL_PLCR_BIT_INVALID;
--
2.23.0



More information about the dev mailing list