From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 392F8A04DE for ; Thu, 22 Oct 2020 06:25:50 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 0E85172F7; Thu, 22 Oct 2020 06:25:49 +0200 (CEST) Received: from huawei.com (szxga06-in.huawei.com [45.249.212.32]) by dpdk.org (Postfix) with ESMTP id 5591769C8; Thu, 22 Oct 2020 06:25:44 +0200 (CEST) Received: from DGGEMS410-HUB.china.huawei.com (unknown [172.30.72.59]) by Forcepoint Email with ESMTP id 53D7418E2D6B70A80709; Thu, 22 Oct 2020 12:25:41 +0800 (CST) Received: from localhost (10.174.187.156) by DGGEMS410-HUB.china.huawei.com (10.3.19.210) with Microsoft SMTP Server id 14.3.487.0; Thu, 22 Oct 2020 12:25:31 +0800 From: wangyunjian To: CC: , , , Yunjian Wang , Date: Thu, 22 Oct 2020 12:25:27 +0800 Message-ID: X-Mailer: git-send-email 1.9.5.msysgit.1 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.174.187.156] X-CFilter-Loop: Reflected Subject: [dpdk-stable] [dpdk-dev] [PATCH] net/mvpp2: fix memory leak in error path X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 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 Sender: "stable" From: Yunjian Wang 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 --- 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