net/bnxt: fix crash in vector mode Tx
authorKalesh AP <kalesh-anakkur.purayil@broadcom.com>
Fri, 28 Aug 2020 05:01:10 +0000 (10:31 +0530)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 18 Sep 2020 16:55:07 +0000 (18:55 +0200)
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")
Fixes: 398358341419 ("net/bnxt: support NEON")
Cc: stable@dpdk.org
Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Reviewed-by: Lance Richardson <lance.richardson@broadcom.com>
Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
drivers/net/bnxt/bnxt_rxtx_vec_neon.c
drivers/net/bnxt/bnxt_rxtx_vec_sse.c

index 488a0b4..bf76c2a 100644 (file)
@@ -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) {
index c4ca5cf..98220bc 100644 (file)
@@ -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) {