Re: [PATCH net 10/10] microchip: lan865x: move setting of netops to fix crash
From: Maxime Chevallier
Date: Thu Oct 08 2026 - 04:39:12 EST
On 10/8/26 04:26, David Yang wrote:
> lan865x_probe() assigns netdev_ops only after oa_tc6_init(), which
> connects the internal MAC-PHY through phy_connect_direct().
> phy_attach_direct() -> phy_link_topo_add_phy() reads dev->netdev_ops
> through netdev_need_ops_lock() since the commit in question, so probing
> crashes with a NULL pointer dereference when CONFIG_NET_SHAPER is
> enabled.
>
> Assign netdev_ops before the PHY attach, as was done for emac in commit
> 7c9f391ec89c ("net: emac: move setting of netops to fix crash").
>
> Fixes: ded86da4bbb7 ("net: ethtool: relax ethnl_req_get_phydev() locking assertion")
> Signed-off-by: David Yang <mmyangfl@xxxxxxxxx>
Reviewed-by: Maxime Chevallier <maxime.chevallier@xxxxxxxxxxx>
Thanks,
Maxime
> ---
> drivers/net/ethernet/microchip/lan865x/lan865x.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/ethernet/microchip/lan865x/lan865x.c b/drivers/net/ethernet/microchip/lan865x/lan865x.c
> index 26a2761332a5..633d00857774 100644
> --- a/drivers/net/ethernet/microchip/lan865x/lan865x.c
> +++ b/drivers/net/ethernet/microchip/lan865x/lan865x.c
> @@ -346,6 +346,8 @@ static int lan865x_probe(struct spi_device *spi)
> spi_set_drvdata(spi, priv);
> INIT_WORK(&priv->multicast_work, lan865x_multicast_work_handler);
>
> + netdev->netdev_ops = &lan865x_netdev_ops;
> +
> priv->tc6 = oa_tc6_init(spi, netdev, NULL);
> if (!priv->tc6) {
> ret = -ENODEV;
> @@ -397,7 +399,6 @@ static int lan865x_probe(struct spi_device *spi)
>
> netdev->if_port = IF_PORT_10BASET;
> netdev->irq = spi->irq;
> - netdev->netdev_ops = &lan865x_netdev_ops;
> netdev->ethtool_ops = &lan865x_ethtool_ops;
>
> ret = register_netdev(netdev);