net/bnxt: fix crash in VFR queue select
authorSomnath Kotur <somnath.kotur@broadcom.com>
Fri, 11 Sep 2020 01:55:49 +0000 (18:55 -0700)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 18 Sep 2020 16:55:11 +0000 (18:55 +0200)
Instead of bounds checking against max possible rings while selecting
queue index for the VF representor, do it against the number of rings
configured.

Fixes: 6dc83230b43b ("net/bnxt: support port representor data path")
Cc: stable@dpdk.org
Signed-off-by: Somnath Kotur <somnath.kotur@broadcom.com>
Reviewed-by: Venkat Duvvuru <venkatkumar.duvvuru@broadcom.com>
drivers/net/bnxt/bnxt_reps.c

index b975d5a..ef5bd06 100644 (file)
@@ -45,9 +45,12 @@ bnxt_vfr_recv(uint16_t port_id, uint16_t queue_id, struct rte_mbuf *mbuf)
 
        vfr_eth_dev = &rte_eth_devices[port_id];
        vfr_bp = vfr_eth_dev->data->dev_private;
-       /* If rxq_id happens to be > max rep_queue, use rxq0 */
-       que = queue_id < BNXT_MAX_VF_REP_RINGS ? queue_id : 0;
+       /* If rxq_id happens to be > nr_rings, use ring 0 */
+       que = queue_id < vfr_bp->rx_nr_rings ? queue_id : 0;
        rep_rxq = vfr_bp->rx_queues[que];
+       /* Ideally should not happen now, paranoid check */
+       if (!rep_rxq)
+               return 1;
        rep_rxr = rep_rxq->rx_ring;
        mask = rep_rxr->rx_ring_struct->ring_mask;