[4/6] net/bnxt: fix a possible segfault in vector mode Tx path
Checks
Commit Message
From: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
rte_pktmbuf_prefree_seg() can return NULL if the mbuf still
has remaining references on it.
Adding a NULL check to prevent segfault.
Fixes: bc4a000f2f53 ("net/bnxt: implement SSE vector mode")
Cc: stable@dpdk.org
Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Reviewed-by: Lance Richardson <lance.richardson@broadcom.com>
Reviewed-by: Ajit Kumar Khaparde <ajit.khaparde@broadcom.com>
Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
---
drivers/net/bnxt/bnxt_rxtx_vec_neon.c | 2 ++
drivers/net/bnxt/bnxt_rxtx_vec_sse.c | 2 ++
2 files changed, 4 insertions(+)
@@ -329,6 +329,8 @@ bnxt_tx_cmp_vec(struct bnxt_tx_queue *txq, int nr_pkts)
tx_buf = &txr->tx_buf_ring[cons];
cons = RING_NEXT(txr->tx_ring_struct, cons);
mbuf = rte_pktmbuf_prefree_seg(tx_buf->mbuf);
+ if (unlikely(mbuf == NULL))
+ continue;
tx_buf->mbuf = NULL;
if (blk && mbuf->pool != free[0]->pool) {
@@ -334,6 +334,8 @@ bnxt_tx_cmp_vec(struct bnxt_tx_queue *txq, int nr_pkts)
tx_buf = &txr->tx_buf_ring[cons];
cons = RING_NEXT(txr->tx_ring_struct, cons);
mbuf = rte_pktmbuf_prefree_seg(tx_buf->mbuf);
+ if (unlikely(mbuf == NULL))
+ continue;
tx_buf->mbuf = NULL;
if (blk && mbuf->pool != free[0]->pool) {