[PATCH net-next v1 0/4] net/mlx5: Don't free CQs whose destroy failed

From: Yuho Choi

Date: Fri Oct 16 2026 - 00:59:17 EST


mlx5_core_destroy_cq() can fail, and when it does the CQ may still
exist in firmware with access to its buffer and doorbell record. It
also returns early in that case, without waiting for EQ handlers that
may already hold a reference to the CQ. The four helpers in this series
ignore that error and free the CQ buffer anyway, while their teardown
paths also free the object that embeds the struct mlx5_core_cq.

Keep the buffer and the object that embeds the CQ when DESTROY_CQ
fails, as the regular mlx5_ib CQ destroy path does. The HWS send ring
CQs are polled and never armed, so the HWS patch keeps only their
buffer rather than passing the error up through the queue open and
close paths.

The issues were found with a static analysis tool from ongoing, not yet
published research, and confirmed by code inspection. None of them was
reproduced, so this targets net-next; I can resend for net if you
prefer.

Compile-tested only (x86_64 defconfig with MLX5_CORE_EN, MLX5_ESWITCH,
MLX5_SW_STEERING and MLX5_HW_STEERING, W=1).

Yuho Choi (4):
net/mlx5: Don't free the ASO CQ if destroying it fails
net/mlx5: Don't free the WC test CQ if destroying it fails
net/mlx5: DR, Don't free the send ring CQ if destroying it fails
net/mlx5: HWS, Don't free the send ring CQ buffer if destroying the CQ
fails

.../net/ethernet/mellanox/mlx5/core/lib/aso.c | 18 +++++++++++++-----
.../mellanox/mlx5/core/steering/hws/send.c | 4 +++-
.../mellanox/mlx5/core/steering/sws/dr_send.c | 4 +++-
drivers/net/ethernet/mellanox/mlx5/core/wc.c | 17 ++++++++++++-----
4 files changed, 31 insertions(+), 12 deletions(-)


base-commit: 2f2f7eeef8b0a1a9b9ca998231419873ccae8d4e
--
2.43.0