bnxt_en: Fix ethtool selftest crash under error conditions.
authorMichael Chan <michael.chan@broadcom.com>
Sat, 29 Jun 2019 15:16:45 +0000 (11:16 -0400)
committerDavid S. Miller <davem@davemloft.net>
Sun, 30 Jun 2019 23:00:26 +0000 (16:00 -0700)
After ethtool loopback packet tests, we re-open the nic for the next
IRQ test.  If the open fails, we must not proceed with the IRQ test
or we will crash with NULL pointer dereference.  Fix it by checking
the bnxt_open_nic() return code before proceeding.

Reported-by: Somasundaram Krishnasamy <somasundaram.krishnasamy@oracle.com>
Fixes: 67fea463fd87 ("bnxt_en: Add interrupt test to ethtool -t selftest.")
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c

index a6c7baf38036a27fdb2335b64bc07adcdffb280a..ec68707c3338b5450c639f2ab1c889555cddedba 100644 (file)
@@ -2842,7 +2842,7 @@ static void bnxt_self_test(struct net_device *dev, struct ethtool_test *etest,
        bool offline = false;
        u8 test_results = 0;
        u8 test_mask = 0;
-       int rc, i;
+       int rc = 0, i;
 
        if (!bp->num_tests || !BNXT_SINGLE_PF(bp))
                return;
@@ -2913,9 +2913,9 @@ static void bnxt_self_test(struct net_device *dev, struct ethtool_test *etest,
                }
                bnxt_hwrm_phy_loopback(bp, false, false);
                bnxt_half_close_nic(bp);
-               bnxt_open_nic(bp, false, true);
+               rc = bnxt_open_nic(bp, false, true);
        }
-       if (bnxt_test_irq(bp)) {
+       if (rc || bnxt_test_irq(bp)) {
                buf[BNXT_IRQ_TEST_IDX] = 1;
                etest->flags |= ETH_TEST_FL_FAILED;
        }