diff options
| author | Wei Fang <[email protected]> | 2025-05-23 08:37:59 +0000 |
|---|---|---|
| committer | Jakub Kicinski <[email protected]> | 2025-05-28 00:10:25 +0000 |
| commit | 0795b05a59b1371b18ffbf09d385296b12e9f5d5 (patch) | |
| tree | a7f7ec949443bc2647d99183b95aa9748dc3682a /drivers/net/mctp/mctp-usb.c | |
| parent | af_packet: move notifier's packet_dev_mc out of rcu critical section (diff) | |
| download | kernel-0795b05a59b1371b18ffbf09d385296b12e9f5d5.tar.gz kernel-0795b05a59b1371b18ffbf09d385296b12e9f5d5.zip | |
net: phy: clear phydev->devlink when the link is deleted
There is a potential crash issue when disabling and re-enabling the
network port. When disabling the network port, phy_detach() calls
device_link_del() to remove the device link, but it does not clear
phydev->devlink, so phydev->devlink is not a NULL pointer. Then the
network port is re-enabled, but if phy_attach_direct() fails before
calling device_link_add(), the code jumps to the "error" label and
calls phy_detach(). Since phydev->devlink retains the old value from
the previous attach/detach cycle, device_link_del() uses the old value,
which accesses a NULL pointer and causes a crash. The simplified crash
log is as follows.
[ 24.702421] Call trace:
[ 24.704856] device_link_put_kref+0x20/0x120
[ 24.709124] device_link_del+0x30/0x48
[ 24.712864] phy_detach+0x24/0x168
[ 24.716261] phy_attach_direct+0x168/0x3a4
[ 24.720352] phylink_fwnode_phy_connect+0xc8/0x14c
[ 24.725140] phylink_of_phy_connect+0x1c/0x34
Therefore, phydev->devlink needs to be cleared when the device link is
deleted.
Fixes: bc66fa87d4fd ("net: phy: Add link between phy dev and mac dev")
Signed-off-by: Wei Fang <[email protected]>
Reviewed-by: Andrew Lunn <[email protected]>
Reviewed-by: Florian Fainelli <[email protected]>
Link: https://patch.msgid.link/[email protected]
Signed-off-by: Jakub Kicinski <[email protected]>
Diffstat (limited to 'drivers/net/mctp/mctp-usb.c')
0 files changed, 0 insertions, 0 deletions
