net: stmmac: Fix crash observed if PHY does not support EEE
authorJon Hunter <jonathanh@nvidia.com>
Wed, 26 Jun 2019 10:23:22 +0000 (11:23 +0100)
committerDavid S. Miller <davem@davemloft.net>
Wed, 26 Jun 2019 16:10:24 +0000 (09:10 -0700)
commit177d935a13703eb809049c97c31a1e4d80b4cfbb
treefd6816c38c23a447609e94b8c7ac1150f9f2dbcb
parent0867bb9768dedaae2c0e572ade5ccaa682a9298c
net: stmmac: Fix crash observed if PHY does not support EEE

If the PHY does not support EEE mode, then a crash is observed when the
ethernet interface is enabled. The crash occurs, because if the PHY does
not support EEE, then although the EEE timer is never configured, it is
still marked as enabled and so the stmmac ethernet driver is still
trying to update the timer by calling mod_timer(). This triggers a BUG()
in the mod_timer() because we are trying to update a timer when there is
no callback function set because timer_setup() was never called for this
timer.

The problem is caused because we return true from the function
stmmac_eee_init(), marking the EEE timer as enabled, even when we have
not configured the EEE timer. Fix this by ensuring that we return false
if the PHY does not support EEE and hence, 'eee_active' is not set.

Fixes: 74371272f97f ("net: stmmac: Convert to phylink and remove phylib logic")
Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
Tested-by: Thierry Reding <treding@nvidia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c