The Memory Region (MR) cache contains pointers to mlx5_mr. The MR cache indexes are filled when a new MR is created. As it is possible for MR to be created on the flight, an extra validation must be added to avoid segmentation fault.
Fixes: b0b093845793 ("net/mlx5: use buffer address for LKEY search") Cc: sta...@dpdk.org Signed-off-by: Xueming Li <xuemi...@mellanox.com> Signed-off-by: Shahaf Shuler <shah...@mellanox.com> Acked-by: Nelio Laranjeiro <nelio.laranje...@6wind.com> --- drivers/net/mlx5/mlx5_rxtx.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/net/mlx5/mlx5_rxtx.h b/drivers/net/mlx5/mlx5_rxtx.h index 2eb2f0506..a63364d79 100644 --- a/drivers/net/mlx5/mlx5_rxtx.h +++ b/drivers/net/mlx5/mlx5_rxtx.h @@ -555,7 +555,8 @@ mlx5_tx_mb2mr(struct mlx5_txq_data *txq, struct rte_mbuf *mb) if (likely(txq->mp2mr[i]->start <= addr && txq->mp2mr[i]->end >= addr)) return txq->mp2mr[i]->lkey; for (i = 0; (i != RTE_DIM(txq->mp2mr)); ++i) { - if (unlikely(txq->mp2mr[i]->mr == NULL)) { + if (unlikely(txq->mp2mr[i] == NULL || + txq->mp2mr[i]->mr == NULL)) { /* Unknown MP, add a new MR for it. */ break; } -- 2.12.0