Re: [PATCH] can: j1939: implement NETDEV_UNREGISTER notification handler

From: Marc Kleine-Budde
Date: Tue Sep 09 2025 - 07:49:24 EST


On 25.08.2025 23:07:24, Tetsuo Handa wrote:
> syzbot is reporting
>
> unregister_netdevice: waiting for vcan0 to become free. Usage count = 2
>
> problem, for j1939 protocol did not have NETDEV_UNREGISTER notification
> handler for undoing changes made by j1939_sk_bind().
>
> Commit 25fe97cb7620 ("can: j1939: move j1939_priv_put() into sk_destruct
> callback") expects that a call to j1939_priv_put() can be unconditionally
> delayed until j1939_sk_sock_destruct() is called. But we need to call
> j1939_priv_put() against an extra ref held by j1939_sk_bind() call
> (as a part of undoing changes made by j1939_sk_bind()) as soon as
> NETDEV_UNREGISTER notification fires (i.e. before j1939_sk_sock_destruct()
> is called via j1939_sk_release()). Otherwise, the extra ref on "struct
> j1939_priv" held by j1939_sk_bind() call prevents "struct net_device" from
> dropping the usage count to 1; making it impossible for
> unregister_netdevice() to continue.
>
> Reported-by: syzbot <syzbot+881d65229ca4f9ae8c84@xxxxxxxxxxxxxxxxxxxxxxxxx>
> Closes: https://syzkaller.appspot.com/bug?extid=881d65229ca4f9ae8c84
> Tested-by: syzbot <syzbot+881d65229ca4f9ae8c84@xxxxxxxxxxxxxxxxxxxxxxxxx>
> Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol")
> Fixes: 25fe97cb7620 ("can: j1939: move j1939_priv_put() into sk_destruct callback")
> Signed-off-by: Tetsuo Handa <penguin-kernel@xxxxxxxxxxxxxxxxxxx>

Applied to linux-can.

> --- a/net/can/j1939/socket.c
> +++ b/net/can/j1939/socket.c
> @@ -1303,6 +1303,55 @@ void j1939_sk_netdev_event_netdown(struct j1939_priv *priv)
> read_unlock_bh(&priv->j1939_socks_lock);
> }
>
> +void j1939_sk_netdev_event_unregister(struct j1939_priv *priv)
> +{
> + struct sock *sk;
> + struct j1939_sock *jsk;
> + bool wait_rcu = false;
> +
> + rescan: /* The caller is holding a ref on this "priv" via j1939_priv_get_by_ndev(). */
^^

I've removed the space while applying the patch.

regards,
Marc

--
Pengutronix e.K. | Marc Kleine-Budde |
Embedded Linux | https://www.pengutronix.de |
Vertretung Nürnberg | Phone: +49-5121-206917-129 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-9 |

Attachment: signature.asc
Description: PGP signature