net/mlx5: fix Rx segmented packets on mbuf starvation
authorJiawei Zhu <zhujiawei12@huawei.com>
Mon, 1 Mar 2021 17:19:50 +0000 (12:19 -0500)
committerRaslan Darawsheh <rasland@nvidia.com>
Wed, 10 Mar 2021 08:43:27 +0000 (09:43 +0100)
commitc9678e49feef4e423ebd917c7670fee238f4c2bb
tree191f8ec8f146bb447d92fe9f008fbac619d208e7
parent10127dbacf7c041a1b67b9e962635b31184bd604
net/mlx5: fix Rx segmented packets on mbuf starvation

The issue occurred if mbuf starvation happened
in the middle of segmented packet reception.
In such a situation, after release the segments of
packet being received, code did not advance the
consumer index to the next stride. This caused
the receiving of the wrong segmented packet data.

The possible error scenario:
- we assume segs_n is 4 and we are receiving 4
  segments of multi-segment packet.
- we fail to allocate mbuf while receiving the 3rd segment,
  and this frees the mbufs of the packet chain we have built.
  There are the 1st and 2nd segments in the chain.
- the 1st and the 2nd segments of this stride of Rx queue
  are filled up (in elts array) with the new allocated
  mbufs and their data are random (the 3rd and 4th
  segments still contain the valid data of the packet though).
- on the next iteration of stride processing we get
  the wrong two segments of the multi-segment packet.

Hence, we should skip these mbufs in the stride and
we should advance the consumer index on loop exit.

Fixes: 15a756b63734 ("net/mlx5: fix possible NULL dereference in Rx path")
Cc: stable@dpdk.org
Signed-off-by: Jiawei Zhu <zhujiawei12@huawei.com>
Acked-by: Viacheslav Ovsiienko <viacheslavo@nvidia.com>
drivers/net/mlx5/mlx5_rxtx.c