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 a6c7baf..ec68707 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;
        }