mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-04 18:19:28 +09:00
net: enetc: fix destroyed phylink dereference during unbind
[ Upstream commit3af409ca27] The following call path suggests that calling unregister_netdev on an interface that is up will first bring it down. enetc_pf_remove -> unregister_netdev -> unregister_netdevice_queue -> unregister_netdevice_many -> dev_close_many -> __dev_close_many -> enetc_close -> enetc_stop -> phylink_stop However, enetc first destroys the phylink instance, then calls unregister_netdev. This is already dissimilar to the setup (and error path teardown path) from enetc_pf_probe, but more than that, it is buggy because it is invalid to call phylink_stop after phylink_destroy. So let's first unregister the netdev (and let the .ndo_stop events consume themselves), then destroy the phylink instance, then free the netdev. Fixes:71b77a7a27("enetc: Migrate to PHYLINK and PCS_LYNX") Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
79234cb9aa
commit
65a10cb163
@@ -1164,14 +1164,15 @@ static void enetc_pf_remove(struct pci_dev *pdev)
|
||||
struct enetc_ndev_priv *priv;
|
||||
|
||||
priv = netdev_priv(si->ndev);
|
||||
enetc_phylink_destroy(priv);
|
||||
enetc_mdiobus_destroy(pf);
|
||||
|
||||
if (pf->num_vfs)
|
||||
enetc_sriov_configure(pdev, 0);
|
||||
|
||||
unregister_netdev(si->ndev);
|
||||
|
||||
enetc_phylink_destroy(priv);
|
||||
enetc_mdiobus_destroy(pf);
|
||||
|
||||
enetc_free_msix(priv);
|
||||
|
||||
enetc_free_si_resources(priv);
|
||||
|
||||
Reference in New Issue
Block a user