From: Maor Dickman <ma...@nvidia.com>

In case of failure in tc update skb the packet is dropped
without freeing the skb.

Fixed by freeing the skb in case failure in tc update skb.

Fixes: d6d27782864f ("net/mlx5: E-Switch, Restore chain id on miss")
Fixes: c75690972228 ("net/mlx5e: Add tc chains offload support for nic flows")
Signed-off-by: Maor Dickman <ma...@nvidia.com>
Reviewed-by: Roi Dayan <r...@nvidia.com>
Signed-off-by: Saeed Mahameed <sae...@nvidia.com>
---
 drivers/net/ethernet/mellanox/mlx5/core/en_rx.c | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c 
b/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
index 7f5851c61218..ca4b55839a8a 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
@@ -1262,8 +1262,10 @@ static void mlx5e_handle_rx_cqe(struct mlx5e_rq *rq, 
struct mlx5_cqe64 *cqe)
        mlx5e_complete_rx_cqe(rq, cqe, cqe_bcnt, skb);
 
        if (mlx5e_cqe_regb_chain(cqe))
-               if (!mlx5e_tc_update_skb(cqe, skb))
+               if (!mlx5e_tc_update_skb(cqe, skb)) {
+                       dev_kfree_skb_any(skb);
                        goto free_wqe;
+               }
 
        napi_gro_receive(rq->cq.napi, skb);
 
@@ -1316,8 +1318,10 @@ static void mlx5e_handle_rx_cqe_rep(struct mlx5e_rq *rq, 
struct mlx5_cqe64 *cqe)
        if (rep->vlan && skb_vlan_tag_present(skb))
                skb_vlan_pop(skb);
 
-       if (!mlx5e_rep_tc_update_skb(cqe, skb, &tc_priv))
+       if (!mlx5e_rep_tc_update_skb(cqe, skb, &tc_priv)) {
+               dev_kfree_skb_any(skb);
                goto free_wqe;
+       }
 
        napi_gro_receive(rq->cq.napi, skb);
 
@@ -1371,8 +1375,10 @@ static void mlx5e_handle_rx_cqe_mpwrq_rep(struct 
mlx5e_rq *rq, struct mlx5_cqe64
 
        mlx5e_complete_rx_cqe(rq, cqe, cqe_bcnt, skb);
 
-       if (!mlx5e_rep_tc_update_skb(cqe, skb, &tc_priv))
+       if (!mlx5e_rep_tc_update_skb(cqe, skb, &tc_priv)) {
+               dev_kfree_skb_any(skb);
                goto mpwrq_cqe_out;
+       }
 
        napi_gro_receive(rq->cq.napi, skb);
 
@@ -1528,8 +1534,10 @@ static void mlx5e_handle_rx_cqe_mpwrq(struct mlx5e_rq 
*rq, struct mlx5_cqe64 *cq
        mlx5e_complete_rx_cqe(rq, cqe, cqe_bcnt, skb);
 
        if (mlx5e_cqe_regb_chain(cqe))
-               if (!mlx5e_tc_update_skb(cqe, skb))
+               if (!mlx5e_tc_update_skb(cqe, skb)) {
+                       dev_kfree_skb_any(skb);
                        goto mpwrq_cqe_out;
+               }
 
        napi_gro_receive(rq->cq.napi, skb);
 
-- 
2.29.2

Reply via email to