aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKamal Heib <kamalh@mellanox.com>2016-08-28 18:13:48 -0400
committerDavid S. Miller <davem@davemloft.net>2016-08-28 23:24:15 -0400
commitbf50082c15eb2bc47d1922e70f424c57f36646d5 (patch)
treea84ae34e39dd7d16c5cb1b5afbf17bf352a14a7c
parentc8cf78fe100b0d152a1932327c24cefc0ba4bdbe (diff)
net/mlx5e: Fix memory leak if refreshing TIRs fails
Free 'in' command object also when mlx5_core_modify_tir fails. Fixes: 724b2aa15126 ("net/mlx5e: TIRs management refactoring") Signed-off-by: Kamal Heib <kamalh@mellanox.com> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/en_common.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_common.c b/drivers/net/ethernet/mellanox/mlx5/core/en_common.c
index 673043ccd76c..9cce153e1035 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_common.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_common.c
@@ -139,7 +139,7 @@ int mlx5e_refresh_tirs_self_loopback_enable(struct mlx5_core_dev *mdev)
139 struct mlx5e_tir *tir; 139 struct mlx5e_tir *tir;
140 void *in; 140 void *in;
141 int inlen; 141 int inlen;
142 int err; 142 int err = 0;
143 143
144 inlen = MLX5_ST_SZ_BYTES(modify_tir_in); 144 inlen = MLX5_ST_SZ_BYTES(modify_tir_in);
145 in = mlx5_vzalloc(inlen); 145 in = mlx5_vzalloc(inlen);
@@ -151,10 +151,11 @@ int mlx5e_refresh_tirs_self_loopback_enable(struct mlx5_core_dev *mdev)
151 list_for_each_entry(tir, &mdev->mlx5e_res.td.tirs_list, list) { 151 list_for_each_entry(tir, &mdev->mlx5e_res.td.tirs_list, list) {
152 err = mlx5_core_modify_tir(mdev, tir->tirn, in, inlen); 152 err = mlx5_core_modify_tir(mdev, tir->tirn, in, inlen);
153 if (err) 153 if (err)
154 return err; 154 goto out;
155 } 155 }
156 156
157out:
157 kvfree(in); 158 kvfree(in);
158 159
159 return 0; 160 return err;
160} 161}