Skip to content

Commit

Permalink
net/mvpp2: fix memory leak in error path
Browse files Browse the repository at this point in the history
[ upstream commit 1b2c17d ]

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: cdb53f8 ("net/mvpp2: support metering")

Signed-off-by: Yunjian Wang <wangyunjian@huawei.com>
Acked-by: Liron Himi <lironh@marvell.com>
  • Loading branch information
wyjwang authored and bluca committed Nov 9, 2020
1 parent df6c635 commit e30d958
Showing 1 changed file with 6 additions and 6 deletions.
12 changes: 6 additions & 6 deletions drivers/net/mvpp2/mrvl_mtr.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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;
Expand Down

0 comments on commit e30d958

Please sign in to comment.