Re: [PATCH net 02/10] net: hisilicon: hip04_eth: Move setting of netops to fix crash
From: Maxime Chevallier
Date: Thu Oct 08 2026 - 04:31:43 EST
On 10/8/26 04:26, David Yang wrote:
> hip04_mac_probe() calls of_phy_connect() before ndev->netdev_ops is
> assigned. 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/hisilicon/hip04_eth.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/ethernet/hisilicon/hip04_eth.c b/drivers/net/ethernet/hisilicon/hip04_eth.c
> index fc2c47dcfaab..d0409de5c553 100644
> --- a/drivers/net/ethernet/hisilicon/hip04_eth.c
> +++ b/drivers/net/ethernet/hisilicon/hip04_eth.c
> @@ -976,6 +976,8 @@ static int hip04_mac_probe(struct platform_device *pdev)
> goto init_fail;
> }
>
> + ndev->netdev_ops = &hip04_netdev_ops;
> +
> priv->phy_node = of_parse_phandle(node, "phy-handle", 0);
> if (priv->phy_node) {
> priv->phy = of_phy_connect(ndev, priv->phy_node,
> @@ -989,7 +991,6 @@ static int hip04_mac_probe(struct platform_device *pdev)
>
> INIT_WORK(&priv->tx_timeout_task, hip04_tx_timeout_task);
>
> - ndev->netdev_ops = &hip04_netdev_ops;
> ndev->ethtool_ops = &hip04_ethtool_ops;
> ndev->watchdog_timeo = TX_TIMEOUT;
> ndev->priv_flags |= IFF_UNICAST_FLT;