From: Ajit Khaparde <[email protected]>

Add checks to prevent a segfault while accessing members of
structures which may not have been initialized yet.

Fixes: 1b7ceba3e375 ("net/bnxt: support Rx queue count")
Cc: [email protected]
Signed-off-by: Ajit Khaparde <[email protected]>
Signed-off-by: Mohammad Shuab Siddique <[email protected]>
---
 drivers/net/bnxt/bnxt_ethdev.c |  3 +++
 drivers/net/bnxt/bnxt_hwrm.c   |  3 +++
 drivers/net/bnxt/bnxt_ring.c   | 11 ++++++++++-
 3 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c
index 72a31dfbb5..c45afdb20a 100644
--- a/drivers/net/bnxt/bnxt_ethdev.c
+++ b/drivers/net/bnxt/bnxt_ethdev.c
@@ -1435,6 +1435,9 @@ static int bnxt_scattered_rx(struct rte_eth_dev *eth_dev)
        for (i = 0; i < eth_dev->data->nb_rx_queues; i++) {
                struct bnxt_rx_queue *rxq = eth_dev->data->rx_queues[i];
 
+               if (rxq == NULL)
+                       continue;
+
                buf_size = (uint16_t)(rte_pktmbuf_data_room_size(rxq->mb_pool) -
                                      RTE_PKTMBUF_HEADROOM);
                if (eth_dev->data->mtu + overhead > buf_size)
diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c
index e4ae27d3f4..02a5d00738 100644
--- a/drivers/net/bnxt/bnxt_hwrm.c
+++ b/drivers/net/bnxt/bnxt_hwrm.c
@@ -3328,6 +3328,9 @@ bnxt_free_all_hwrm_stat_ctxs(struct bnxt *bp)
 
        for (i = 0; i < bp->rx_cp_nr_rings; i++) {
 
+               if (bp->rx_queues[i] == NULL)
+                       continue;
+
                cpr = bp->rx_queues[i]->cp_ring;
                if (BNXT_HAS_RING_GRPS(bp))
                        bp->grp_info[i].fw_stats_ctx = -1;
diff --git a/drivers/net/bnxt/bnxt_ring.c b/drivers/net/bnxt/bnxt_ring.c
index 579b73d2ce..064520aa62 100644
--- a/drivers/net/bnxt/bnxt_ring.c
+++ b/drivers/net/bnxt/bnxt_ring.c
@@ -723,6 +723,9 @@ static void bnxt_init_all_rings(struct bnxt *bp)
 
        for (i = 0; i < bp->rx_cp_nr_rings; i++) {
                rxq = bp->rx_queues[i];
+
+               if (rxq == NULL)
+                       continue;
                /* Rx-compl */
                cp_ring = rxq->cp_ring->cp_ring_struct;
                cp_ring->fw_ring_id = INVALID_HW_RING_ID;
@@ -765,9 +768,14 @@ int bnxt_alloc_hwrm_rings(struct bnxt *bp)
        for (i = 0; i < bp->rx_cp_nr_rings; i++) {
                unsigned int soc_id = bp->eth_dev->device->numa_node;
                struct bnxt_rx_queue *rxq  = bp->rx_queues[i];
-               struct bnxt_rx_ring_info *rxr = rxq->rx_ring;
+               struct bnxt_rx_ring_info *rxr;
                struct bnxt_ring *ring;
 
+               if (rxq == NULL)
+                       return -EINVAL;
+
+               rxr = rxq->rx_ring;
+
                if (bnxt_need_agg_ring(bp->eth_dev)) {
                        ring = rxr->ag_ring_struct;
                        if (ring == NULL) {
-- 
2.47.3

Reply via email to