From 1b2c17d60d978d2570baa9e5c478ebca1fce3859 Mon Sep 17 00:00:00 2001 From: Yunjian Wang Date: Thu, 22 Oct 2020 12:25:27 +0800 Subject: [PATCH] net/mvpp2: fix memory leak in error path 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@dpdk.org Signed-off-by: Yunjian Wang Acked-by: Liron Himi --- 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.20.1