From: Parav Pandit <[email protected]>

When root ns setup for rdma, sniffer tx and sniffer rx fails,
such root ns cleanup is done by the error unwinding path of
mlx5_cleanup_fs().
Below call graph shows an example for sniffer_rx_root_ns.

mlx5_init_fs()
  init_sniffer_rx_root_ns()
    cleanup_root_ns(steering->sniffer_rx_root_ns);
mlx5_cleanup_fs()
  cleanup_root_ns(steering->sniffer_rx_root_ns);
  /* double free of sniffer_rx_root_ns */

Hence, use the existing cleanup_fs to cleanup.

Fixes: d83eb50e29de3 ("net/mlx5: Add support in RDMA RX steering")
Fixes: 87d22483ce68e ("net/mlx5: Add sniffer namespaces")
Signed-off-by: Parav Pandit <[email protected]>
Signed-off-by: Saeed Mahameed <[email protected]>
---
 .../net/ethernet/mellanox/mlx5/core/fs_core.c  | 18 +++---------------
 1 file changed, 3 insertions(+), 15 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c 
b/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
index d7ca7e82a832..4fa87ca63bca 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
@@ -2474,11 +2474,7 @@ static int init_sniffer_tx_root_ns(struct 
mlx5_flow_steering *steering)
 
        /* Create single prio */
        prio = fs_create_prio(&steering->sniffer_tx_root_ns->ns, 0, 1);
-       if (IS_ERR(prio)) {
-               cleanup_root_ns(steering->sniffer_tx_root_ns);
-               return PTR_ERR(prio);
-       }
-       return 0;
+       return PTR_ERR_OR_ZERO(prio);
 }
 
 static int init_sniffer_rx_root_ns(struct mlx5_flow_steering *steering)
@@ -2491,11 +2487,7 @@ static int init_sniffer_rx_root_ns(struct 
mlx5_flow_steering *steering)
 
        /* Create single prio */
        prio = fs_create_prio(&steering->sniffer_rx_root_ns->ns, 0, 1);
-       if (IS_ERR(prio)) {
-               cleanup_root_ns(steering->sniffer_rx_root_ns);
-               return PTR_ERR(prio);
-       }
-       return 0;
+       return PTR_ERR_OR_ZERO(prio);
 }
 
 static int init_rdma_rx_root_ns(struct mlx5_flow_steering *steering)
@@ -2511,11 +2503,7 @@ static int init_rdma_rx_root_ns(struct 
mlx5_flow_steering *steering)
 
        /* Create single prio */
        prio = fs_create_prio(&steering->rdma_rx_root_ns->ns, 0, 1);
-       if (IS_ERR(prio)) {
-               cleanup_root_ns(steering->rdma_rx_root_ns);
-               return PTR_ERR(prio);
-       }
-       return 0;
+       return PTR_ERR_OR_ZERO(prio);
 }
 static int init_fdb_root_ns(struct mlx5_flow_steering *steering)
 {
-- 
2.21.0

Reply via email to