net/bnxt: check if MAC address is all zeros
authorAjit Khaparde <ajit.khaparde@broadcom.com>
Fri, 26 Jan 2018 17:31:57 +0000 (09:31 -0800)
committerFerruh Yigit <ferruh.yigit@intel.com>
Mon, 29 Jan 2018 09:04:28 +0000 (10:04 +0100)
In certain cases the MAC address of a port could be all zeros.
Catch it early, log a message and fail the initialization.

Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
drivers/net/bnxt/bnxt_ethdev.c
drivers/net/bnxt/bnxt_filter.c
drivers/net/bnxt/bnxt_filter.h

index daed1fc..76fff71 100644 (file)
@@ -3246,6 +3246,16 @@ skip_init:
                rc = -ENOMEM;
                goto error_free;
        }
+
+       if (check_zero_bytes(bp->dflt_mac_addr, ETHER_ADDR_LEN)) {
+               PMD_DRV_LOG(ERR,
+                           "Invalid MAC addr %02X:%02X:%02X:%02X:%02X:%02X\n",
+                           bp->dflt_mac_addr[0], bp->dflt_mac_addr[1],
+                           bp->dflt_mac_addr[2], bp->dflt_mac_addr[3],
+                           bp->dflt_mac_addr[4], bp->dflt_mac_addr[5]);
+               rc = -EINVAL;
+               goto error_free;
+       }
        /* Copy the permanent MAC from the qcap response address now. */
        memcpy(bp->mac_addr, bp->dflt_mac_addr, sizeof(bp->mac_addr));
        memcpy(&eth_dev->data->mac_addrs[0], bp->mac_addr, ETHER_ADDR_LEN);
index 0716dd8..032e8ee 100644 (file)
@@ -250,7 +250,7 @@ nxt_non_void_action(const struct rte_flow_action *cur)
        }
 }
 
-static inline int check_zero_bytes(const uint8_t *bytes, int len)
+int check_zero_bytes(const uint8_t *bytes, int len)
 {
        int i;
        for (i = 0; i < len; i++)
index 2591a87..a3c702d 100644 (file)
@@ -97,6 +97,7 @@ struct bnxt_filter_info *bnxt_get_unused_filter(struct bnxt *bp);
 void bnxt_free_filter(struct bnxt *bp, struct bnxt_filter_info *filter);
 struct bnxt_filter_info *bnxt_get_l2_filter(struct bnxt *bp,
                struct bnxt_filter_info *nf, struct bnxt_vnic_info *vnic);
+int check_zero_bytes(const uint8_t *bytes, int len);
 
 #define NTUPLE_FLTR_ALLOC_INPUT_EN_SRC_MACADDR \
        HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_ENABLES_SRC_MACADDR