]> git.droids-corp.org - dpdk.git/commitdiff
net/bnxt: cap maximum number of unicast MAC addresses
authorKalesh AP <kalesh-anakkur.purayil@broadcom.com>
Tue, 4 Jan 2022 08:38:12 +0000 (14:08 +0530)
committerAjit Khaparde <ajit.khaparde@broadcom.com>
Wed, 12 Jan 2022 01:50:16 +0000 (02:50 +0100)
The Maximum number of receive mac addr is hard coded to 128
in the ethdev library(RTE_ETH_NUM_RECEIVE_MAC_ADDR).
But the bnxt devices support more than 128 unicast MAC filters
which could result in a segfault while user tries to add more
than 128 unicast MAC addresses to the port.

Fixes: a2033fda22ab ("net/bnxt: fix number of MAC addresses for VMDq")
Cc: stable@dpdk.org
Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
drivers/net/bnxt/bnxt_ethdev.c

index 99a7d35470bf3252080bbac8959a4def540a1289..82350a50080aba40d2665e660abda0a5c3c07f16 100644 (file)
@@ -954,7 +954,7 @@ static int bnxt_dev_info_get_op(struct rte_eth_dev *eth_dev,
                return rc;
 
        /* MAC Specifics */
-       dev_info->max_mac_addrs = bp->max_l2_ctx;
+       dev_info->max_mac_addrs = RTE_MIN(bp->max_l2_ctx, RTE_ETH_NUM_RECEIVE_MAC_ADDR);
        dev_info->max_hash_mac_addrs = 0;
 
        /* PF/VF specifics */
@@ -5016,11 +5016,15 @@ static int bnxt_alloc_stats_mem(struct bnxt *bp)
 static int bnxt_setup_mac_addr(struct rte_eth_dev *eth_dev)
 {
        struct bnxt *bp = eth_dev->data->dev_private;
+       size_t max_mac_addr = RTE_MIN(bp->max_l2_ctx, RTE_ETH_NUM_RECEIVE_MAC_ADDR);
        int rc = 0;
 
+       if (bp->max_l2_ctx > RTE_ETH_NUM_RECEIVE_MAC_ADDR)
+               PMD_DRV_LOG(INFO, "Max number of MAC addrs supported is %d, but will be limited to %d\n",
+                           bp->max_l2_ctx, RTE_ETH_NUM_RECEIVE_MAC_ADDR);
+
        eth_dev->data->mac_addrs = rte_zmalloc("bnxt_mac_addr_tbl",
-                                              RTE_ETHER_ADDR_LEN *
-                                              bp->max_l2_ctx,
+                                              RTE_ETHER_ADDR_LEN * max_mac_addr,
                                               0);
        if (eth_dev->data->mac_addrs == NULL) {
                PMD_DRV_LOG(ERR, "Failed to alloc MAC addr tbl\n");