Netdev List
 help / color / mirror / Atom feed
* [PATCH net] can: j1939: use netdevice_tracker for j1939_priv tracking
@ 2026-05-17 12:17 Tetsuo Handa
  2026-05-19  1:21 ` [PATCH net v2] can: j1939: use netdevice_tracker for j1939_{priv,session,ecu} tracking Tetsuo Handa
  0 siblings, 1 reply; 5+ messages in thread
From: Tetsuo Handa @ 2026-05-17 12:17 UTC (permalink / raw)
  To: Robin van der Gracht, Oleksij Rempel, kernel, Oliver Hartkopp,
	Marc Kleine-Budde, linux-can, Network Development

syzbot is still reporting

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

problem. A debug printk() patch in linux-next-20260508 identified that
there is dev_hold()/dev_put() imbalance in j1939_priv management.

  Call trace for vcan0[26] +4 at
       __dev_hold include/linux/netdevice.h:4470 [inline]
       netdev_hold include/linux/netdevice.h:4513 [inline]
       dev_hold include/linux/netdevice.h:4536 [inline]
       j1939_priv_create net/can/j1939/main.c:140 [inline]
       j1939_netdev_start+0x36b/0xc10 net/can/j1939/main.c:268
       j1939_sk_bind+0x853/0xb30 net/can/j1939/socket.c:506
       __sys_bind_socket net/socket.c:1948 [inline]
       __sys_bind+0x2e9/0x410 net/socket.c:1979

  Call trace for vcan0[28] -3 at
       __dev_put include/linux/netdevice.h:4456 [inline]
       netdev_put include/linux/netdevice.h:4523 [inline]
       dev_put include/linux/netdevice.h:4548 [inline]
       __j1939_priv_release net/can/j1939/main.c:166 [inline]
       kref_put include/linux/kref.h:65 [inline]
       j1939_priv_put+0x128/0x270 net/can/j1939/main.c:172
       j1939_sk_sock_destruct+0x52/0x90 net/can/j1939/socket.c:388
       __sk_destruct+0x8d/0x9d0 net/core/sock.c:2352
       rcu_do_batch kernel/rcu/tree.c:2617 [inline]
       rcu_core kernel/rcu/tree.c:2869 [inline]
       rcu_cpu_kthread+0x99e/0x1470 kernel/rcu/tree.c:2957
       smpboot_thread_fn+0x541/0xa50 kernel/smpboot.c:160
       kthread+0x388/0x470 kernel/kthread.c:436
       ret_from_fork+0x514/0xb70 arch/x86/kernel/process.c:158
       ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:245

For further investigation using upstream kernels, enable netdevice_tracker
in j1939_priv management.

Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
---
 net/can/j1939/j1939-priv.h | 1 +
 net/can/j1939/main.c       | 8 ++++----
 2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/net/can/j1939/j1939-priv.h b/net/can/j1939/j1939-priv.h
index 81f58924b4ac..e92beb24b50b 100644
--- a/net/can/j1939/j1939-priv.h
+++ b/net/can/j1939/j1939-priv.h
@@ -60,6 +60,7 @@ struct j1939_priv {
 	rwlock_t lock;
 
 	struct net_device *ndev;
+	netdevice_tracker dev_tracker;
 
 	/* list of 256 ecu ptrs, that cache the claimed addresses.
 	 * also protected by the above lock
diff --git a/net/can/j1939/main.c b/net/can/j1939/main.c
index 9937c04241bc..5e5e6c228f22 100644
--- a/net/can/j1939/main.c
+++ b/net/can/j1939/main.c
@@ -137,7 +137,7 @@ static struct j1939_priv *j1939_priv_create(struct net_device *ndev)
 	priv->ndev = ndev;
 	kref_init(&priv->kref);
 	kref_init(&priv->rx_kref);
-	dev_hold(ndev);
+	netdev_hold(ndev, &priv->dev_tracker, GFP_KERNEL);
 
 	netdev_dbg(priv->ndev, "%s : 0x%p\n", __func__, priv);
 
@@ -163,7 +163,7 @@ static void __j1939_priv_release(struct kref *kref)
 	WARN_ON_ONCE(!list_empty(&priv->ecus));
 	WARN_ON_ONCE(!list_empty(&priv->j1939_socks));
 
-	dev_put(ndev);
+	netdev_put(ndev, &priv->dev_tracker);
 	kfree(priv);
 }
 
@@ -281,7 +281,7 @@ struct j1939_priv *j1939_netdev_start(struct net_device *ndev)
 		 */
 		kref_get(&priv_new->rx_kref);
 		mutex_unlock(&j1939_netdev_lock);
-		dev_put(ndev);
+		netdev_put(ndev, &priv->dev_tracker);
 		kfree(priv);
 		return priv_new;
 	}
@@ -298,7 +298,7 @@ struct j1939_priv *j1939_netdev_start(struct net_device *ndev)
 	j1939_priv_set(ndev, NULL);
 	mutex_unlock(&j1939_netdev_lock);
 
-	dev_put(ndev);
+	netdev_put(ndev, &priv->dev_tracker);
 	kfree(priv);
 
 	return ERR_PTR(ret);
-- 
2.54.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2026-05-19 23:11 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-17 12:17 [PATCH net] can: j1939: use netdevice_tracker for j1939_priv tracking Tetsuo Handa
2026-05-19  1:21 ` [PATCH net v2] can: j1939: use netdevice_tracker for j1939_{priv,session,ecu} tracking Tetsuo Handa
2026-05-19  2:04   ` Jakub Kicinski
2026-05-19  2:22     ` Tetsuo Handa
2026-05-19 23:11       ` Jakub Kicinski

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox