bnxt_en: Fix ethtool selftest crash under error conditions.
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: 67fea463fd
("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>
This commit is contained in:
parent
c20dc142dd
commit
d27e2ca116
|
@ -2842,7 +2842,7 @@ static void bnxt_self_test(struct net_device *dev, struct ethtool_test *etest,
|
||||||
bool offline = false;
|
bool offline = false;
|
||||||
u8 test_results = 0;
|
u8 test_results = 0;
|
||||||
u8 test_mask = 0;
|
u8 test_mask = 0;
|
||||||
int rc, i;
|
int rc = 0, i;
|
||||||
|
|
||||||
if (!bp->num_tests || !BNXT_SINGLE_PF(bp))
|
if (!bp->num_tests || !BNXT_SINGLE_PF(bp))
|
||||||
return;
|
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_hwrm_phy_loopback(bp, false, false);
|
||||||
bnxt_half_close_nic(bp);
|
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;
|
buf[BNXT_IRQ_TEST_IDX] = 1;
|
||||||
etest->flags |= ETH_TEST_FL_FAILED;
|
etest->flags |= ETH_TEST_FL_FAILED;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue