Skip to content

Commit 4f7bddf

Browse files
Valentine Fatievgregkh
authored andcommitted
net/mlx5e: Fix memory leak in mlx5_core_destroy_cq() error path
commit 94b960b upstream. Prior to this patch in case mlx5_core_destroy_cq() failed it returns without completing all destroy operations and that leads to memory leak. Instead, complete the destroy flow before return error. Also move mlx5_debug_cq_remove() to the beginning of mlx5_core_destroy_cq() to be symmetrical with mlx5_core_create_cq(). kmemleak complains on: unreferenced object 0xc000000038625100 (size 64): comm "ethtool", pid 28301, jiffies 4298062946 (age 785.380s) hex dump (first 32 bytes): 60 01 48 94 00 00 00 c0 b8 05 34 c3 00 00 00 c0 `.H.......4..... 02 00 00 00 00 00 00 00 00 db 7d c1 00 00 00 c0 ..........}..... backtrace: [<000000009e8643cb>] add_res_tree+0xd0/0x270 [mlx5_core] [<00000000e7cb8e6c>] mlx5_debug_cq_add+0x5c/0xc0 [mlx5_core] [<000000002a12918f>] mlx5_core_create_cq+0x1d0/0x2d0 [mlx5_core] [<00000000cef0a696>] mlx5e_create_cq+0x210/0x3f0 [mlx5_core] [<000000009c642c26>] mlx5e_open_cq+0xb4/0x130 [mlx5_core] [<0000000058dfa578>] mlx5e_ptp_open+0x7f4/0xe10 [mlx5_core] [<0000000081839561>] mlx5e_open_channels+0x9cc/0x13e0 [mlx5_core] [<0000000009cf05d4>] mlx5e_switch_priv_channels+0xa4/0x230 [mlx5_core] [<0000000042bbedd8>] mlx5e_safe_switch_params+0x14c/0x300 [mlx5_core] [<0000000004bc9db8>] set_pflag_tx_port_ts+0x9c/0x160 [mlx5_core] [<00000000a0553443>] mlx5e_set_priv_flags+0xd0/0x1b0 [mlx5_core] [<00000000a8f3d84b>] ethnl_set_privflags+0x234/0x2d0 [<00000000fd27f27c>] genl_family_rcv_msg_doit+0x108/0x1d0 [<00000000f495e2bb>] genl_family_rcv_msg+0xe4/0x1f0 [<00000000646c5c2c>] genl_rcv_msg+0x78/0x120 [<00000000d53e384e>] netlink_rcv_skb+0x74/0x1a0 Fixes: e126ba9 ("mlx5: Add driver for Mellanox Connect-IB adapters") Signed-off-by: Valentine Fatiev <[email protected]> Reviewed-by: Moshe Shemesh <[email protected]> Signed-off-by: Saeed Mahameed <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent afb0c67 commit 4f7bddf

File tree

1 file changed

+3
-4
lines changed
  • drivers/net/ethernet/mellanox/mlx5/core

1 file changed

+3
-4
lines changed

drivers/net/ethernet/mellanox/mlx5/core/cq.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -154,23 +154,22 @@ int mlx5_core_destroy_cq(struct mlx5_core_dev *dev, struct mlx5_core_cq *cq)
154154
u32 in[MLX5_ST_SZ_DW(destroy_cq_in)] = {};
155155
int err;
156156

157+
mlx5_debug_cq_remove(dev, cq);
158+
157159
mlx5_eq_del_cq(mlx5_get_async_eq(dev), cq);
158160
mlx5_eq_del_cq(&cq->eq->core, cq);
159161

160162
MLX5_SET(destroy_cq_in, in, opcode, MLX5_CMD_OP_DESTROY_CQ);
161163
MLX5_SET(destroy_cq_in, in, cqn, cq->cqn);
162164
MLX5_SET(destroy_cq_in, in, uid, cq->uid);
163165
err = mlx5_cmd_exec_in(dev, destroy_cq, in);
164-
if (err)
165-
return err;
166166

167167
synchronize_irq(cq->irqn);
168168

169-
mlx5_debug_cq_remove(dev, cq);
170169
mlx5_cq_put(cq);
171170
wait_for_completion(&cq->free);
172171

173-
return 0;
172+
return err;
174173
}
175174
EXPORT_SYMBOL(mlx5_core_destroy_cq);
176175

0 commit comments

Comments
 (0)