[PATCH 1/2] vdpa/mlx5: fix RSS flow leak on steering update failure

Maayan Kashani mkashani at nvidia.com
Sun Oct 25 09:16:38 CET 2026


mlx5_vdpa_steer_update() calls mlx5_vdpa_rss_flows_create() which, on
failure, leaves behind any RSS steering objects (matcher, TIR, TIR
action, flow) it managed to create before the error, relying on the
caller to release them.

mlx5_vdpa_steer_setup() honors that contract by calling
mlx5_vdpa_steer_unset() on its error path, but mlx5_vdpa_virtq_enable()
only logs a warning and continues when mlx5_vdpa_steer_update() fails.
As a result, every failed steering update triggered from the virtq
enable/disable path leaks the partially created software-steering
objects. Over many reconfiguration cycles this exhausts the kernel
software-steering (DR) resources and later probes fail with
"Failed to create Rx domain".

Free the partial RSS flows in mlx5_vdpa_steer_update() itself so that
all callers are covered regardless of how they handle the return value.
mlx5_vdpa_rss_flows_destroy() checks each object for NULL, so the
subsequent steer_unset() on the steer_setup() error path stays a safe
no-op.

Fixes: 9f09b1ca15c5 ("vdpa/mlx5: recreate a virtq becoming enabled")
Cc: stable at dpdk.org

Signed-off-by: Maayan Kashani <mkashani at nvidia.com>
Acked-by: Dariusz Sosnowski <dsosnowski at nvidia.com>
---
 drivers/vdpa/mlx5/mlx5_vdpa_steer.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/vdpa/mlx5/mlx5_vdpa_steer.c b/drivers/vdpa/mlx5/mlx5_vdpa_steer.c
index c2e0a17ace2..b1bca7f0f7d 100644
--- a/drivers/vdpa/mlx5/mlx5_vdpa_steer.c
+++ b/drivers/vdpa/mlx5/mlx5_vdpa_steer.c
@@ -255,6 +255,7 @@ mlx5_vdpa_steer_update(struct mlx5_vdpa_priv *priv, bool is_dummy)
 		ret = mlx5_vdpa_rss_flows_create(priv);
 		if (ret) {
 			DRV_LOG(ERR, "Cannot create RSS flows.");
+			mlx5_vdpa_rss_flows_destroy(priv);
 			pthread_mutex_unlock(&priv->steer_update_lock);
 			return -1;
 		}
-- 
2.25.1



More information about the dev mailing list