On Mon, Oct 16, 2023 at 08:41:04PM +0900, Yoshihiro Shimoda wrote: > [ Upstream commit 3971442870713de527684398416970cf025b4f89 ] > > The ravb_stop() should call cancel_work_sync(). Otherwise, > ravb_tx_timeout_work() is possible to use the freed priv after > ravb_remove() was called like below: > > CPU0 CPU1 > ravb_tx_timeout() > ravb_remove() > unregister_netdev() > free_netdev(ndev) > // free priv > ravb_tx_timeout_work() > // use priv > > unregister_netdev() will call .ndo_stop() so that ravb_stop() is > called. And, after phy_stop() is called, netif_carrier_off() > is also called. So that .ndo_tx_timeout() will not be called > after phy_stop(). > > Fixes: c156633f1353 ("Renesas Ethernet AVB driver proper") > Reported-by: Zheng Wang <zyytlz.wz@xxxxxxx> > Closes: https://lore.kernel.org/netdev/20230725030026.1664873-1-zyytlz.wz@xxxxxxx/ > Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@xxxxxxxxxxx> > Reviewed-by: Sergey Shtylyov <s.shtylyov@xxxxxx> > Link: https://lore.kernel.org/r/20231005011201.14368-3-yoshihiro.shimoda.uh@xxxxxxxxxxx > Signed-off-by: Jakub Kicinski <kuba@xxxxxxxxxx> > Cc: <stable@xxxxxxxxxxxxxxx> # for 5.10.x and 5.4.x > --- > drivers/net/ethernet/renesas/ravb_main.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c > index a59da6a11976..f218bacec001 100644 > --- a/drivers/net/ethernet/renesas/ravb_main.c > +++ b/drivers/net/ethernet/renesas/ravb_main.c > @@ -1706,6 +1706,8 @@ static int ravb_close(struct net_device *ndev) > of_phy_deregister_fixed_link(np); > } > > + cancel_work_sync(&priv->work); > + > if (priv->chip_id != RCAR_GEN2) { > free_irq(priv->tx_irqs[RAVB_NC], ndev); > free_irq(priv->rx_irqs[RAVB_NC], ndev); > -- > 2.25.1 > Now queued up, thanks. greg k-h