LAN7801 supports fixed-link configurations without an attached PHY. However, lan78xx_set_wol() unconditionally passes netdev->phydev to phy_ethtool_set_wol(), causing a NULL pointer dereference when a userspace WoL request reaches this path. Use phylink_expects_phy() to skip PHY WoL configuration for fixed links, and use phylink_ethtool_set_wol() for configurations that expect a PHY. This avoids the NULL dereference while keeping PHY operations within the phylink API. The issue was reproduced using USB Raw Gadget and dummy_hcd in QEMU. An ETHTOOL_SWOL ioctl triggered a kernel Oops with the original driver. With this change, the same request completes successfully. Fixes: e110bc825897 ("net: usb: lan78xx: Convert to PHYLINK for improved PHY and MAC management") Signed-off-by: Prashant Sengar --- v2: - Use phylink_expects_phy() to avoid PHY WoL operations for fixed-link configurations. - Use phylink_ethtool_set_wol() instead of the direct PHY helper, addressing Andrew Lunn's review. - Preserve the existing controller WoL configuration order. v1: https://lore.kernel.org/netdev/20261018151830.643511-1-prashantsengar25031@gmail.com/ drivers/net/usb/lan78xx.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c index 5655941f1478..1702f633d42e 100644 --- a/drivers/net/usb/lan78xx.c +++ b/drivers/net/usb/lan78xx.c @@ -1805,7 +1805,9 @@ static int lan78xx_set_wol(struct net_device *netdev, if (ret < 0) goto exit_pm_put; - ret = phy_ethtool_set_wol(netdev->phydev, wol); + if (phylink_expects_phy(dev->phylink)) + ret = phylink_ethtool_set_wol(dev->phylink, wol); + exit_pm_put: usb_autopm_put_interface(dev->intf); -- 2.55.0