]> www.infradead.org Git - users/hch/misc.git/commitdiff
can: j1939: add missing calls in NETDEV_UNREGISTER notification handler
authorTetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Sat, 27 Sep 2025 12:11:16 +0000 (21:11 +0900)
committerMarc Kleine-Budde <mkl@pengutronix.de>
Mon, 13 Oct 2025 19:26:31 +0000 (21:26 +0200)
Currently NETDEV_UNREGISTER event handler is not calling
j1939_cancel_active_session() and j1939_sk_queue_drop_all().
This will result in these calls being skipped when j1939_sk_release() is
called. And I guess that the reason syzbot is still reporting

  unregister_netdevice: waiting for vcan0 to become free. Usage count = 2

is caused by lack of these calls.

Calling j1939_cancel_active_session(priv, sk) from j1939_sk_release() can
be covered by calling j1939_cancel_active_session(priv, NULL) from
j1939_netdev_notify().

Calling j1939_sk_queue_drop_all() from j1939_sk_release() can be covered
by calling j1939_sk_netdev_event_netdown() from j1939_netdev_notify().

Therefore, we can reuse j1939_cancel_active_session(priv, NULL) and
j1939_sk_netdev_event_netdown(priv) for NETDEV_UNREGISTER event handler.

Fixes: 7fcbe5b2c6a4 ("can: j1939: implement NETDEV_UNREGISTER notification handler")
Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Tested-by: Oleksij Rempel <o.rempel@pengutronix.de>
Acked-by: Oleksij Rempel <o.rempel@pengutronix.de>
Link: https://patch.msgid.link/3ad3c7f8-5a74-4b07-a193-cb0725823558@I-love.SAKURA.ne.jp
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
net/can/j1939/main.c

index 3706a872ecafdb3c2f279a723b4bc7961f8c6ee4..a93af55df5fd500fa5d564160ad563a3883d2eac 100644 (file)
@@ -378,6 +378,8 @@ static int j1939_netdev_notify(struct notifier_block *nb,
                j1939_ecu_unmap_all(priv);
                break;
        case NETDEV_UNREGISTER:
+               j1939_cancel_active_session(priv, NULL);
+               j1939_sk_netdev_event_netdown(priv);
                j1939_sk_netdev_event_unregister(priv);
                break;
        }