]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commitdiff
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)
committerKhalid Elmously <khalid.elmously@canonical.com>
Fri, 14 Feb 2020 05:29:37 +0000 (00:29 -0500)
BugLink: https://bugs.launchpad.net/bugs/1863019
[ Upstream commit d27e2ca1166aefd54d9c48fb6647dee8115a5dfc ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
Signed-off-by: Khalid Elmously <khalid.elmously@canonical.com>
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c

index 46ecaf3a015663030e95300044cedf56cf225042..7c78bc88200509df3a0fb1b758a59a04faf91b75 100644 (file)
@@ -2483,7 +2483,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;
@@ -2541,9 +2541,9 @@ static void bnxt_self_test(struct net_device *dev, struct ethtool_test *etest,
                }
                bnxt_hwrm_phy_loopback(bp, 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;
        }