Linux CAN drivers development
 help / color / mirror / Atom feed
* [PATCH] can: j1939: make j1939_session_activate() fail if device is no longer registered
@ 2025-11-25 13:39 Tetsuo Handa
  2025-12-09  9:43 ` Tetsuo Handa
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Tetsuo Handa @ 2025-11-25 13:39 UTC (permalink / raw)
  To: Robin van der Gracht, Oleksij Rempel, kernel, Oliver Hartkopp,
	Marc Kleine-Budde, linux-can

syzbot is still reporting

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

even after commit 93a27b5891b8 ("can: j1939: add missing calls in
NETDEV_UNREGISTER notification handler") was added. A debug printk() patch
found that j1939_session_activate() can succeed even after
j1939_cancel_active_session() from j1939_netdev_notify(NETDEV_UNREGISTER)
has completed.

Since j1939_cancel_active_session() is processed with the session list lock
held, checking ndev->reg_state in j1939_session_activate() with the session
list lock held can reliably close the race window.

Reported-by: syzbot <syzbot+881d65229ca4f9ae8c84@syzkaller.appspotmail.com>
Closes: https://syzkaller.appspot.com/bug?extid=881d65229ca4f9ae8c84
Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
---
Should we also make j1939_sk_queue_activate_next_locked() and
j1939_xtp_rx_rts_session_new() not to emit bogus warning message?
Is this error case rare enough to tolerate bogus warning message?

 net/can/j1939/transport.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/net/can/j1939/transport.c b/net/can/j1939/transport.c
index fbf5c8001c9d..613a911dda10 100644
--- a/net/can/j1939/transport.c
+++ b/net/can/j1939/transport.c
@@ -1567,6 +1567,8 @@ int j1939_session_activate(struct j1939_session *session)
 	if (active) {
 		j1939_session_put(active);
 		ret = -EAGAIN;
+	} else if (priv->ndev->reg_state != NETREG_REGISTERED) {
+		ret = -ENODEV;
 	} else {
 		WARN_ON_ONCE(session->state != J1939_SESSION_NEW);
 		list_add_tail(&session->active_session_list_entry,
-- 
2.47.3


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

* Re: [PATCH] can: j1939: make j1939_session_activate() fail if device is no longer registered
  2025-11-25 13:39 [PATCH] can: j1939: make j1939_session_activate() fail if device is no longer registered Tetsuo Handa
@ 2025-12-09  9:43 ` Tetsuo Handa
  2025-12-11  9:46   ` Oleksij Rempel
  2025-12-11  9:47 ` Oleksij Rempel
  2025-12-17  9:47 ` Marc Kleine-Budde
  2 siblings, 1 reply; 5+ messages in thread
From: Tetsuo Handa @ 2025-12-09  9:43 UTC (permalink / raw)
  To: Robin van der Gracht, Oleksij Rempel, kernel, Oliver Hartkopp,
	Marc Kleine-Budde, linux-can

Ping?

On 2025/11/25 22:39, Tetsuo Handa wrote:
> Should we also make j1939_sk_queue_activate_next_locked() and
> j1939_xtp_rx_rts_session_new() not to emit bogus warning message?
linux-next-20251208 has gotten a trace with
j1939_sk_queue_activate_next_locked() and j1939_xtp_rx_rts_session_new().
Do we want to make these functions not to emit bogus warning message?

> Is this error case rare enough to tolerate bogus warning message?



unregister_netdevice: waiting for vcan0 to become free. Usage count = 2
Call trace for vcan0@ffff888086898000 +1 at
     j1939_priv_create net/can/j1939/main.c:148 [inline]
     j1939_netdev_start+0x1de/0xa30 net/can/j1939/main.c:280
     j1939_sk_bind+0x926/0xca0 net/can/j1939/socket.c:498
     __sys_bind_socket net/socket.c:1889 [inline]
     __sys_bind+0x2c6/0x3e0 net/socket.c:1920
Call trace for vcan0@ffff888086898000 +1 at
     j1939_priv_get net/can/j1939/main.c:189 [inline]
     j1939_can_rx_register net/can/j1939/main.c:197 [inline]
     j1939_netdev_start+0x615/0xa30 net/can/j1939/main.c:303
     j1939_sk_bind+0x926/0xca0 net/can/j1939/socket.c:498
     __sys_bind_socket net/socket.c:1889 [inline]
     __sys_bind+0x2c6/0x3e0 net/socket.c:1920
Call trace for vcan0@ffff888086898000 +1 at
     j1939_sk_bind+0xa02/0xca0 net/can/j1939/socket.c:510
     __sys_bind_socket net/socket.c:1889 [inline]
     __sys_bind+0x2c6/0x3e0 net/socket.c:1920
Call trace for vcan0@ffff888086898000 +1 at
     j1939_jsk_add net/can/j1939/socket.c:81 [inline]
     j1939_sk_bind+0x769/0xca0 net/can/j1939/socket.c:530
     __sys_bind_socket net/socket.c:1889 [inline]
     __sys_bind+0x2c6/0x3e0 net/socket.c:1920
Call trace for vcan0@ffff888086898000 +2 at
     j1939_session_new+0x12c/0x460 net/can/j1939/transport.c:1504
     j1939_tp_send+0x338/0x8c0 net/can/j1939/transport.c:2021
     j1939_sk_send_loop net/can/j1939/socket.c:1159 [inline]
     j1939_sk_sendmsg+0xaf8/0x1350 net/can/j1939/socket.c:1282
     sock_sendmsg_nosec+0x18f/0x1d0 net/socket.c:737
Call trace for vcan0@ffff888086898000 +2 at
     j1939_session_new+0x134/0x460 net/can/j1939/transport.c:1506
     j1939_tp_send+0x338/0x8c0 net/can/j1939/transport.c:2021
     j1939_sk_send_loop net/can/j1939/socket.c:1159 [inline]
     j1939_sk_sendmsg+0xaf8/0x1350 net/can/j1939/socket.c:1282
     sock_sendmsg_nosec+0x18f/0x1d0 net/socket.c:737
Call trace for vcan0@ffff888086898000 +2 at
     j1939_sk_queue_session net/can/j1939/socket.c:105 [inline]
     j1939_sk_send_loop net/can/j1939/socket.c:1164 [inline]
     j1939_sk_sendmsg+0xb7a/0x1350 net/can/j1939/socket.c:1282
     sock_sendmsg_nosec+0x18f/0x1d0 net/socket.c:737
     __sock_sendmsg net/socket.c:752 [inline]
     ____sys_sendmsg+0x577/0x880 net/socket.c:2610
     ___sys_sendmsg+0x21f/0x2a0 net/socket.c:2664
     __sys_sendmsg net/socket.c:2696 [inline]
     __do_sys_sendmsg net/socket.c:2701 [inline]
     __se_sys_sendmsg net/socket.c:2699 [inline]
     __x64_sys_sendmsg+0x19b/0x260 net/socket.c:2699
     do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
     do_syscall_64+0xfa/0xf80 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
Call trace for vcan0@ffff888086898000 +1 at
     j1939_session_get net/can/j1939/transport.c:249 [inline]
     j1939_session_activate+0x254/0x3f0 net/can/j1939/transport.c:1577
     j1939_sk_send_loop net/can/j1939/socket.c:1168 [inline]
     j1939_sk_sendmsg+0xcc7/0x1350 net/can/j1939/socket.c:1282
     sock_sendmsg_nosec+0x18f/0x1d0 net/socket.c:737
     __sock_sendmsg net/socket.c:752 [inline]
     ____sys_sendmsg+0x577/0x880 net/socket.c:2610
     ___sys_sendmsg+0x21f/0x2a0 net/socket.c:2664
     __sys_sendmsg net/socket.c:2696 [inline]
     __do_sys_sendmsg net/socket.c:2701 [inline]
     __se_sys_sendmsg net/socket.c:2699 [inline]
     __x64_sys_sendmsg+0x19b/0x260 net/socket.c:2699
     do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
     do_syscall_64+0xfa/0xf80 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
Call trace for vcan0@ffff888086898000 +1 at
     j1939_session_get net/can/j1939/transport.c:249 [inline]
     j1939_tp_schedule_txtimer+0x87/0xd0 net/can/j1939/transport.c:704
     j1939_sk_send_loop net/can/j1939/socket.c:1169 [inline]
     j1939_sk_sendmsg+0xcf3/0x1350 net/can/j1939/socket.c:1282
     sock_sendmsg_nosec+0x18f/0x1d0 net/socket.c:737
Call trace for vcan0@ffff888086898000 +2 at
     j1939_session_get net/can/j1939/transport.c:249 [inline]
     j1939_tp_schedule_txtimer net/can/j1939/transport.c:704 [inline]
     j1939_session_tx_rts net/can/j1939/transport.c:754 [inline]
     j1939_xtp_txnext_transmiter net/can/j1939/transport.c:888 [inline]
     j1939_tp_txtimer+0xefb/0x28c0 net/can/j1939/transport.c:1163
     __run_hrtimer kernel/time/hrtimer.c:1777 [inline]
     __hrtimer_run_queues+0x51c/0xc30 kernel/time/hrtimer.c:1841
     hrtimer_run_softirq+0x187/0x2b0 kernel/time/hrtimer.c:1858
     handle_softirqs+0x27d/0x850 kernel/softirq.c:626
Call trace for vcan0@ffff888086898000 +2 at
     j1939_session_get net/can/j1939/transport.c:249 [inline]
     j1939_tp_set_rxtimeout net/can/j1939/transport.c:713 [inline]
     j1939_session_tx_rts net/can/j1939/transport.c:755 [inline]
     j1939_xtp_txnext_transmiter net/can/j1939/transport.c:888 [inline]
     j1939_tp_txtimer+0x1e40/0x28c0 net/can/j1939/transport.c:1163
     __run_hrtimer kernel/time/hrtimer.c:1777 [inline]
     __hrtimer_run_queues+0x51c/0xc30 kernel/time/hrtimer.c:1841
     hrtimer_run_softirq+0x187/0x2b0 kernel/time/hrtimer.c:1858
     handle_softirqs+0x27d/0x850 kernel/softirq.c:626
Call trace for vcan0@ffff888086898000 -4 at
     j1939_session_put+0x47/0x480 net/can/j1939/transport.c:300
     j1939_tp_txtimer+0x1a9f/0x28c0 net/can/j1939/transport.c:1209
     __run_hrtimer kernel/time/hrtimer.c:1777 [inline]
     __hrtimer_run_queues+0x51c/0xc30 kernel/time/hrtimer.c:1841
     hrtimer_run_softirq+0x187/0x2b0 kernel/time/hrtimer.c:1858
     handle_softirqs+0x27d/0x850 kernel/softirq.c:626
Call trace for vcan0@ffff888086898000 +2 at
     j1939_priv_get net/can/j1939/main.c:189 [inline]
     j1939_can_recv+0x17f/0xa30 net/can/j1939/main.c:54
     deliver net/can/af_can.c:575 [inline]
     can_rcv_filter+0x357/0x7d0 net/can/af_can.c:609
     can_receive+0x312/0x450 net/can/af_can.c:666
     can_rcv+0x145/0x270 net/can/af_can.c:690
     __netif_receive_skb_one_core net/core/dev.c:6138 [inline]
     __netif_receive_skb+0x164/0x380 net/core/dev.c:6251
     process_backlog+0x622/0x1500 net/core/dev.c:6603
     __napi_poll+0xae/0x320 net/core/dev.c:7667
     napi_poll net/core/dev.c:7730 [inline]
     net_rx_action+0x672/0xe50 net/core/dev.c:7882
     handle_softirqs+0x27d/0x850 kernel/softirq.c:626
Call trace for vcan0@ffff888086898000 +2 at
     j1939_session_get net/can/j1939/transport.c:249 [inline]
     j1939_session_get_by_addr_locked+0x169/0x730 net/can/j1939/transport.c:526
     j1939_session_get_by_addr net/can/j1939/transport.c:565 [inline]
     j1939_xtp_rx_rts+0x120/0x1910 net/can/j1939/transport.c:1730
     j1939_tp_cmd_recv net/can/j1939/transport.c:2074 [inline]
     j1939_tp_recv+0xb24/0x1040 net/can/j1939/transport.c:2161
     j1939_can_recv+0x6a0/0xa30 net/can/j1939/main.c:108
     deliver net/can/af_can.c:575 [inline]
     can_rcv_filter+0x357/0x7d0 net/can/af_can.c:609
     can_receive+0x312/0x450 net/can/af_can.c:666
     can_rcv+0x145/0x270 net/can/af_can.c:690
     __netif_receive_skb_one_core net/core/dev.c:6138 [inline]
     __netif_receive_skb+0x164/0x380 net/core/dev.c:6251
     process_backlog+0x622/0x1500 net/core/dev.c:6603
     __napi_poll+0xae/0x320 net/core/dev.c:7667
     napi_poll net/core/dev.c:7730 [inline]
     net_rx_action+0x672/0xe50 net/core/dev.c:7882
     handle_softirqs+0x27d/0x850 kernel/softirq.c:626
Call trace for vcan0@ffff888086898000 -1 at
     j1939_session_put+0x47/0x480 net/can/j1939/transport.c:300
     j1939_session_get_by_addr_locked+0x23a/0x730 net/can/j1939/transport.c:530
     j1939_session_get_by_addr net/can/j1939/transport.c:565 [inline]
     j1939_xtp_rx_rts+0x120/0x1910 net/can/j1939/transport.c:1730
     j1939_tp_cmd_recv net/can/j1939/transport.c:2074 [inline]
     j1939_tp_recv+0xb24/0x1040 net/can/j1939/transport.c:2161
     j1939_can_recv+0x6a0/0xa30 net/can/j1939/main.c:108
     deliver net/can/af_can.c:575 [inline]
     can_rcv_filter+0x357/0x7d0 net/can/af_can.c:609
     can_receive+0x312/0x450 net/can/af_can.c:666
     can_rcv+0x145/0x270 net/can/af_can.c:690
     __netif_receive_skb_one_core net/core/dev.c:6138 [inline]
     __netif_receive_skb+0x164/0x380 net/core/dev.c:6251
     process_backlog+0x622/0x1500 net/core/dev.c:6603
     __napi_poll+0xae/0x320 net/core/dev.c:7667
     napi_poll net/core/dev.c:7730 [inline]
     net_rx_action+0x672/0xe50 net/core/dev.c:7882
     handle_softirqs+0x27d/0x850 kernel/softirq.c:626
Call trace for vcan0@ffff888086898000 +1 at
     j1939_session_new+0x12c/0x460 net/can/j1939/transport.c:1504
     j1939_session_fresh_new net/can/j1939/transport.c:1546 [inline]
     j1939_xtp_rx_rts_session_new net/can/j1939/transport.c:1631 [inline]
     j1939_xtp_rx_rts+0xd82/0x1910 net/can/j1939/transport.c:1752
     j1939_tp_cmd_recv net/can/j1939/transport.c:2074 [inline]
     j1939_tp_recv+0xb24/0x1040 net/can/j1939/transport.c:2161
     j1939_can_recv+0x6a0/0xa30 net/can/j1939/main.c:108
     deliver net/can/af_can.c:575 [inline]
     can_rcv_filter+0x357/0x7d0 net/can/af_can.c:609
     can_receive+0x312/0x450 net/can/af_can.c:666
     can_rcv+0x145/0x270 net/can/af_can.c:690
     __netif_receive_skb_one_core net/core/dev.c:6138 [inline]
     __netif_receive_skb+0x164/0x380 net/core/dev.c:6251
     process_backlog+0x622/0x1500 net/core/dev.c:6603
     __napi_poll+0xae/0x320 net/core/dev.c:7667
     napi_poll net/core/dev.c:7730 [inline]
     net_rx_action+0x672/0xe50 net/core/dev.c:7882
     handle_softirqs+0x27d/0x850 kernel/softirq.c:626
Call trace for vcan0@ffff888086898000 +1 at
     j1939_session_new+0x134/0x460 net/can/j1939/transport.c:1506
     j1939_session_fresh_new net/can/j1939/transport.c:1546 [inline]
     j1939_xtp_rx_rts_session_new net/can/j1939/transport.c:1631 [inline]
     j1939_xtp_rx_rts+0xd82/0x1910 net/can/j1939/transport.c:1752
     j1939_tp_cmd_recv net/can/j1939/transport.c:2074 [inline]
     j1939_tp_recv+0xb24/0x1040 net/can/j1939/transport.c:2161
     j1939_can_recv+0x6a0/0xa30 net/can/j1939/main.c:108
     deliver net/can/af_can.c:575 [inline]
     can_rcv_filter+0x357/0x7d0 net/can/af_can.c:609
     can_receive+0x312/0x450 net/can/af_can.c:666
     can_rcv+0x145/0x270 net/can/af_can.c:690
     __netif_receive_skb_one_core net/core/dev.c:6138 [inline]
     __netif_receive_skb+0x164/0x380 net/core/dev.c:6251
     process_backlog+0x622/0x1500 net/core/dev.c:6603
     __napi_poll+0xae/0x320 net/core/dev.c:7667
     napi_poll net/core/dev.c:7730 [inline]
     net_rx_action+0x672/0xe50 net/core/dev.c:7882
     handle_softirqs+0x27d/0x850 kernel/softirq.c:626
Call trace for vcan0@ffff888086898000 +1 at
     j1939_session_get net/can/j1939/transport.c:249 [inline]
     j1939_session_get_by_addr_locked+0x169/0x730 net/can/j1939/transport.c:526
     j1939_session_activate+0xb4/0x3f0 net/can/j1939/transport.c:1566
     j1939_xtp_rx_rts_session_new net/can/j1939/transport.c:1656 [inline]
     j1939_xtp_rx_rts+0x111e/0x1910 net/can/j1939/transport.c:1752
     j1939_tp_cmd_recv net/can/j1939/transport.c:2074 [inline]
     j1939_tp_recv+0xb24/0x1040 net/can/j1939/transport.c:2161
     j1939_can_recv+0x6a0/0xa30 net/can/j1939/main.c:108
     deliver net/can/af_can.c:575 [inline]
     can_rcv_filter+0x357/0x7d0 net/can/af_can.c:609
     can_receive+0x312/0x450 net/can/af_can.c:666
     can_rcv+0x145/0x270 net/can/af_can.c:690
     __netif_receive_skb_one_core net/core/dev.c:6138 [inline]
     __netif_receive_skb+0x164/0x380 net/core/dev.c:6251
     process_backlog+0x622/0x1500 net/core/dev.c:6603
     __napi_poll+0xae/0x320 net/core/dev.c:7667
     napi_poll net/core/dev.c:7730 [inline]
     net_rx_action+0x672/0xe50 net/core/dev.c:7882
     handle_softirqs+0x27d/0x850 kernel/softirq.c:626
Call trace for vcan0@ffff888086898000 -1 at
     j1939_session_put+0x47/0x480 net/can/j1939/transport.c:300
     j1939_session_get_by_addr_locked+0x23a/0x730 net/can/j1939/transport.c:530
     j1939_session_activate+0xb4/0x3f0 net/can/j1939/transport.c:1566
     j1939_xtp_rx_rts_session_new net/can/j1939/transport.c:1656 [inline]
     j1939_xtp_rx_rts+0x111e/0x1910 net/can/j1939/transport.c:1752
     j1939_tp_cmd_recv net/can/j1939/transport.c:2074 [inline]
     j1939_tp_recv+0xb24/0x1040 net/can/j1939/transport.c:2161
     j1939_can_recv+0x6a0/0xa30 net/can/j1939/main.c:108
     deliver net/can/af_can.c:575 [inline]
     can_rcv_filter+0x357/0x7d0 net/can/af_can.c:609
     can_receive+0x312/0x450 net/can/af_can.c:666
     can_rcv+0x145/0x270 net/can/af_can.c:690
     __netif_receive_skb_one_core net/core/dev.c:6138 [inline]
     __netif_receive_skb+0x164/0x380 net/core/dev.c:6251
     process_backlog+0x622/0x1500 net/core/dev.c:6603
     __napi_poll+0xae/0x320 net/core/dev.c:7667
     napi_poll net/core/dev.c:7730 [inline]
     net_rx_action+0x672/0xe50 net/core/dev.c:7882
     handle_softirqs+0x27d/0x850 kernel/softirq.c:626
Call trace for vcan0@ffff888086898000 +1 at
     j1939_session_get net/can/j1939/transport.c:249 [inline]
     j1939_session_activate+0x254/0x3f0 net/can/j1939/transport.c:1577
     j1939_xtp_rx_rts_session_new net/can/j1939/transport.c:1656 [inline]
     j1939_xtp_rx_rts+0x111e/0x1910 net/can/j1939/transport.c:1752
     j1939_tp_cmd_recv net/can/j1939/transport.c:2074 [inline]
     j1939_tp_recv+0xb24/0x1040 net/can/j1939/transport.c:2161
     j1939_can_recv+0x6a0/0xa30 net/can/j1939/main.c:108
     deliver net/can/af_can.c:575 [inline]
     can_rcv_filter+0x357/0x7d0 net/can/af_can.c:609
     can_receive+0x312/0x450 net/can/af_can.c:666
     can_rcv+0x145/0x270 net/can/af_can.c:690
     __netif_receive_skb_one_core net/core/dev.c:6138 [inline]
     __netif_receive_skb+0x164/0x380 net/core/dev.c:6251
     process_backlog+0x622/0x1500 net/core/dev.c:6603
     __napi_poll+0xae/0x320 net/core/dev.c:7667
     napi_poll net/core/dev.c:7730 [inline]
     net_rx_action+0x672/0xe50 net/core/dev.c:7882
     handle_softirqs+0x27d/0x850 kernel/softirq.c:626
Call trace for vcan0@ffff888086898000 +1 at
     j1939_session_get net/can/j1939/transport.c:249 [inline]
     j1939_tp_set_rxtimeout net/can/j1939/transport.c:713 [inline]
     j1939_xtp_rx_rts+0x75b/0x1910 net/can/j1939/transport.c:1769
     j1939_tp_cmd_recv net/can/j1939/transport.c:2074 [inline]
     j1939_tp_recv+0xb24/0x1040 net/can/j1939/transport.c:2161
     j1939_can_recv+0x6a0/0xa30 net/can/j1939/main.c:108
     deliver net/can/af_can.c:575 [inline]
     can_rcv_filter+0x357/0x7d0 net/can/af_can.c:609
     can_receive+0x312/0x450 net/can/af_can.c:666
     can_rcv+0x145/0x270 net/can/af_can.c:690
     __netif_receive_skb_one_core net/core/dev.c:6138 [inline]
     __netif_receive_skb+0x164/0x380 net/core/dev.c:6251
     process_backlog+0x622/0x1500 net/core/dev.c:6603
     __napi_poll+0xae/0x320 net/core/dev.c:7667
     napi_poll net/core/dev.c:7730 [inline]
     net_rx_action+0x672/0xe50 net/core/dev.c:7882
     handle_softirqs+0x27d/0x850 kernel/softirq.c:626
Call trace for vcan0@ffff888086898000 -2 at
     j1939_session_put+0x47/0x480 net/can/j1939/transport.c:300
     j1939_xtp_rx_rts+0x8bb/0x1910 include/linux/hrtimer.h:-1
     j1939_tp_cmd_recv net/can/j1939/transport.c:2074 [inline]
     j1939_tp_recv+0xb24/0x1040 net/can/j1939/transport.c:2161
     j1939_can_recv+0x6a0/0xa30 net/can/j1939/main.c:108
     deliver net/can/af_can.c:575 [inline]
     can_rcv_filter+0x357/0x7d0 net/can/af_can.c:609
     can_receive+0x312/0x450 net/can/af_can.c:666
     can_rcv+0x145/0x270 net/can/af_can.c:690
     __netif_receive_skb_one_core net/core/dev.c:6138 [inline]
     __netif_receive_skb+0x164/0x380 net/core/dev.c:6251
     process_backlog+0x622/0x1500 net/core/dev.c:6603
     __napi_poll+0xae/0x320 net/core/dev.c:7667
     napi_poll net/core/dev.c:7730 [inline]
     net_rx_action+0x672/0xe50 net/core/dev.c:7882
     handle_softirqs+0x27d/0x850 kernel/softirq.c:626
Call trace for vcan0@ffff888086898000 -2 at
     j1939_priv_put+0x23/0x370 net/can/j1939/main.c:182
     j1939_can_recv+0x6e0/0xa30 net/can/j1939/main.c:115
     deliver net/can/af_can.c:575 [inline]
     can_rcv_filter+0x357/0x7d0 net/can/af_can.c:609
     can_receive+0x312/0x450 net/can/af_can.c:666
     can_rcv+0x145/0x270 net/can/af_can.c:690
     __netif_receive_skb_one_core net/core/dev.c:6138 [inline]
     __netif_receive_skb+0x164/0x380 net/core/dev.c:6251
     process_backlog+0x622/0x1500 net/core/dev.c:6603
     __napi_poll+0xae/0x320 net/core/dev.c:7667
     napi_poll net/core/dev.c:7730 [inline]
     net_rx_action+0x672/0xe50 net/core/dev.c:7882
     handle_softirqs+0x27d/0x850 kernel/softirq.c:626
Call trace for vcan0@ffff888086898000 -2 at
     j1939_session_put+0x47/0x480 net/can/j1939/transport.c:300
     j1939_sk_send_loop net/can/j1939/socket.c:1207 [inline]
     j1939_sk_sendmsg+0x10a0/0x1350 net/can/j1939/socket.c:1282
     sock_sendmsg_nosec+0x18f/0x1d0 net/socket.c:737
Call trace for vcan0@ffff888086898000 +3 at
     j1939_session_get net/can/j1939/transport.c:249 [inline]
     j1939_tp_rxtimer+0x313/0x3f0 net/can/j1939/transport.c:1256
     __run_hrtimer kernel/time/hrtimer.c:1777 [inline]
     __hrtimer_run_queues+0x51c/0xc30 kernel/time/hrtimer.c:1841
     hrtimer_run_softirq+0x187/0x2b0 kernel/time/hrtimer.c:1858
     handle_softirqs+0x27d/0x850 kernel/softirq.c:626
Call trace for vcan0@ffff888086898000 -5 at
     j1939_session_put+0x47/0x480 net/can/j1939/transport.c:300
     j1939_tp_rxtimer+0x177/0x3f0 net/can/j1939/transport.c:1268
     __run_hrtimer kernel/time/hrtimer.c:1777 [inline]
     __hrtimer_run_queues+0x51c/0xc30 kernel/time/hrtimer.c:1841
     hrtimer_run_softirq+0x187/0x2b0 kernel/time/hrtimer.c:1858
     handle_softirqs+0x27d/0x850 kernel/softirq.c:626
Call trace for vcan0@ffff888086898000 -2 at
     j1939_session_put+0x47/0x480 net/can/j1939/transport.c:300
     j1939_session_deactivate_locked net/can/j1939/transport.c:1089 [inline]
     j1939_session_deactivate+0x212/0x2b0 net/can/j1939/transport.c:1101
     j1939_session_deactivate_activate_next net/can/j1939/transport.c:1110 [inline]
     j1939_tp_rxtimer+0x1d5/0x3f0 net/can/j1939/transport.c:1239
     __run_hrtimer kernel/time/hrtimer.c:1777 [inline]
     __hrtimer_run_queues+0x51c/0xc30 kernel/time/hrtimer.c:1841
     hrtimer_run_softirq+0x187/0x2b0 kernel/time/hrtimer.c:1858
     handle_softirqs+0x27d/0x850 kernel/softirq.c:626
Call trace for vcan0@ffff888086898000 -2 at
     j1939_session_put+0x47/0x480 net/can/j1939/transport.c:300
     j1939_sk_queue_activate_next_locked net/can/j1939/socket.c:174 [inline]
     j1939_sk_queue_activate_next+0x24d/0x400 net/can/j1939/socket.c:208
     j1939_session_deactivate_activate_next net/can/j1939/transport.c:1111 [inline]
     j1939_tp_rxtimer+0x1ea/0x3f0 net/can/j1939/transport.c:1239
     __run_hrtimer kernel/time/hrtimer.c:1777 [inline]
     __hrtimer_run_queues+0x51c/0xc30 kernel/time/hrtimer.c:1841
     hrtimer_run_softirq+0x187/0x2b0 kernel/time/hrtimer.c:1858
     handle_softirqs+0x27d/0x850 kernel/softirq.c:626
Call trace for vcan0@ffff888086898000 +1 at
     j1939_session_get net/can/j1939/transport.c:249 [inline]
     j1939_session_get_by_addr_locked+0x169/0x730 net/can/j1939/transport.c:526
     j1939_session_activate+0xb4/0x3f0 net/can/j1939/transport.c:1566
     j1939_sk_queue_activate_next_locked net/can/j1939/socket.c:181 [inline]
     j1939_sk_queue_activate_next+0x27e/0x400 net/can/j1939/socket.c:208
     j1939_session_deactivate_activate_next net/can/j1939/transport.c:1111 [inline]
     j1939_tp_rxtimer+0x1ea/0x3f0 net/can/j1939/transport.c:1239
     __run_hrtimer kernel/time/hrtimer.c:1777 [inline]
     __hrtimer_run_queues+0x51c/0xc30 kernel/time/hrtimer.c:1841
     hrtimer_run_softirq+0x187/0x2b0 kernel/time/hrtimer.c:1858
     handle_softirqs+0x27d/0x850 kernel/softirq.c:626
Call trace for vcan0@ffff888086898000 -1 at
     j1939_session_put+0x47/0x480 net/can/j1939/transport.c:300
     j1939_session_get_by_addr_locked+0x23a/0x730 net/can/j1939/transport.c:530
     j1939_session_activate+0xb4/0x3f0 net/can/j1939/transport.c:1566
     j1939_sk_queue_activate_next_locked net/can/j1939/socket.c:181 [inline]
     j1939_sk_queue_activate_next+0x27e/0x400 net/can/j1939/socket.c:208
     j1939_session_deactivate_activate_next net/can/j1939/transport.c:1111 [inline]
     j1939_tp_rxtimer+0x1ea/0x3f0 net/can/j1939/transport.c:1239
     __run_hrtimer kernel/time/hrtimer.c:1777 [inline]
     __hrtimer_run_queues+0x51c/0xc30 kernel/time/hrtimer.c:1841
     hrtimer_run_softirq+0x187/0x2b0 kernel/time/hrtimer.c:1858
     handle_softirqs+0x27d/0x850 kernel/softirq.c:626
Call trace for vcan0@ffff888086898000 +1 at
     j1939_session_get net/can/j1939/transport.c:249 [inline]
     j1939_session_activate+0x254/0x3f0 net/can/j1939/transport.c:1577
     j1939_sk_queue_activate_next_locked net/can/j1939/socket.c:181 [inline]
     j1939_sk_queue_activate_next+0x27e/0x400 net/can/j1939/socket.c:208
     j1939_session_deactivate_activate_next net/can/j1939/transport.c:1111 [inline]
     j1939_tp_rxtimer+0x1ea/0x3f0 net/can/j1939/transport.c:1239
     __run_hrtimer kernel/time/hrtimer.c:1777 [inline]
     __hrtimer_run_queues+0x51c/0xc30 kernel/time/hrtimer.c:1841
     hrtimer_run_softirq+0x187/0x2b0 kernel/time/hrtimer.c:1858
     handle_softirqs+0x27d/0x850 kernel/softirq.c:626
Call trace for vcan0@ffff888086898000 +1 at
     j1939_session_get net/can/j1939/transport.c:249 [inline]
     j1939_tp_schedule_txtimer+0x87/0xd0 net/can/j1939/transport.c:704
     j1939_sk_queue_activate_next_locked net/can/j1939/socket.c:194 [inline]
     j1939_sk_queue_activate_next+0x388/0x400 net/can/j1939/socket.c:208
     j1939_session_deactivate_activate_next net/can/j1939/transport.c:1111 [inline]
     j1939_tp_rxtimer+0x1ea/0x3f0 net/can/j1939/transport.c:1239
     __run_hrtimer kernel/time/hrtimer.c:1777 [inline]
     __hrtimer_run_queues+0x51c/0xc30 kernel/time/hrtimer.c:1841
     hrtimer_run_softirq+0x187/0x2b0 kernel/time/hrtimer.c:1858
     handle_softirqs+0x27d/0x850 kernel/softirq.c:626
Call trace for vcan0@ffff888086898000 -2 at
     j1939_priv_put+0x23/0x370 net/can/j1939/main.c:182
     j1939_session_destroy net/can/j1939/transport.c:286 [inline]
     __j1939_session_release net/can/j1939/transport.c:295 [inline]
     kref_put include/linux/kref.h:65 [inline]
     j1939_session_put+0x31c/0x480 net/can/j1939/transport.c:301
     j1939_tp_rxtimer+0x177/0x3f0 net/can/j1939/transport.c:1268
     __run_hrtimer kernel/time/hrtimer.c:1777 [inline]
     __hrtimer_run_queues+0x51c/0xc30 kernel/time/hrtimer.c:1841
     hrtimer_run_softirq+0x187/0x2b0 kernel/time/hrtimer.c:1858
     handle_softirqs+0x27d/0x850 kernel/softirq.c:626
Call trace for vcan0@ffff888086898000 -1 at
     j1939_session_put+0x47/0x480 net/can/j1939/transport.c:300
     j1939_session_rxtimer_cancel net/can/j1939/transport.c:313 [inline]
     j1939_session_timers_cancel net/can/j1939/transport.c:319 [inline]
     j1939_xtp_rx_rts_session_active net/can/j1939/transport.c:1687 [inline]
     j1939_xtp_rx_rts+0x3cb/0x1910 net/can/j1939/transport.c:1760
     j1939_tp_cmd_recv net/can/j1939/transport.c:2074 [inline]
     j1939_tp_recv+0xb24/0x1040 net/can/j1939/transport.c:2161
     j1939_can_recv+0x6a0/0xa30 net/can/j1939/main.c:108
     deliver net/can/af_can.c:575 [inline]
     can_rcv_filter+0x357/0x7d0 net/can/af_can.c:609
     can_receive+0x312/0x450 net/can/af_can.c:666
     can_rcv+0x145/0x270 net/can/af_can.c:690
     __netif_receive_skb_one_core net/core/dev.c:6138 [inline]
     __netif_receive_skb+0x164/0x380 net/core/dev.c:6251
     process_backlog+0x622/0x1500 net/core/dev.c:6603
     __napi_poll+0xae/0x320 net/core/dev.c:7667
     napi_poll net/core/dev.c:7730 [inline]
     net_rx_action+0x672/0xe50 net/core/dev.c:7882
     handle_softirqs+0x27d/0x850 kernel/softirq.c:626
Call trace for vcan0@ffff888086898000 -1 at
     j1939_priv_put+0x23/0x370 net/can/j1939/main.c:182
     j1939_jsk_del net/can/j1939/socket.c:94 [inline]
     j1939_sk_release+0x408/0x7c0 net/can/j1939/socket.c:649
     __sock_release+0xb9/0x250 net/socket.c:666
Call trace for vcan0@ffff888086898000 -1 at
     j1939_priv_put+0x23/0x370 net/can/j1939/main.c:182
     j1939_can_rx_unregister net/can/j1939/main.c:219 [inline]
     __j1939_rx_release net/can/j1939/main.c:228 [inline]
     kref_put_mutex include/linux/kref.h:86 [inline]
     j1939_netdev_stop+0xa6/0x190 net/can/j1939/main.c:323
     j1939_sk_release+0x471/0x7c0 net/can/j1939/socket.c:654
     __sock_release+0xb9/0x250 net/socket.c:666
Call trace for vcan0@ffff888086898000 -1 at
     j1939_priv_put+0x23/0x370 net/can/j1939/main.c:182
     j1939_sk_release+0x471/0x7c0 net/can/j1939/socket.c:654
     __sock_release+0xb9/0x250 net/socket.c:666
Call trace for vcan0@ffff888086898000 -1 at
     j1939_priv_put+0x23/0x370 net/can/j1939/main.c:182
     j1939_sk_sock_destruct+0x52/0x90 net/can/j1939/socket.c:386
     __sk_destruct+0x85/0x880 net/core/sock.c:2350
     rcu_do_batch kernel/rcu/tree.c:2605 [inline]
     rcu_core+0xd70/0x1870 kernel/rcu/tree.c:2857
     handle_softirqs+0x27d/0x850 kernel/softirq.c:626
balance for vcan0@j1939_priv is 2


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

* Re: [PATCH] can: j1939: make j1939_session_activate() fail if device is no longer registered
  2025-12-09  9:43 ` Tetsuo Handa
@ 2025-12-11  9:46   ` Oleksij Rempel
  0 siblings, 0 replies; 5+ messages in thread
From: Oleksij Rempel @ 2025-12-11  9:46 UTC (permalink / raw)
  To: Tetsuo Handa
  Cc: Robin van der Gracht, kernel, Oliver Hartkopp, Marc Kleine-Budde,
	linux-can

Hi,

On Tue, Dec 09, 2025 at 06:43:12PM +0900, Tetsuo Handa wrote:
> Ping?

Sorry for delay.

> On 2025/11/25 22:39, Tetsuo Handa wrote:
> > Should we also make j1939_sk_queue_activate_next_locked() and
> > j1939_xtp_rx_rts_session_new() not to emit bogus warning message?
> linux-next-20251208 has gotten a trace with
> j1939_sk_queue_activate_next_locked() and j1939_xtp_rx_rts_session_new().
> Do we want to make these functions not to emit bogus warning message?
> 
> > Is this error case rare enough to tolerate bogus warning message?

Good question. You are right, error messages do not reflect the reality.

May be something like this?

j1939_sk_queue_activate_next_locked(struct j1939_session *session)

	ret = j1939_session_activate(first);
	if (ret) {
		if (ret == -EAGAIN || ret == -EBUSY)
			netdev_warn_once(first->priv->ndev,
					 "%s: 0x%p: Identical session is already activated.\n",
					 __func__, first);
		else
			netdev_warn_once(first->priv->ndev,
					 "%s: 0x%p: Activation failed with err %i.\n",
					 __func__, first, ret);

		first->err = ret;
		goto activate_next;
	}


j1939_xtp_rx_rts_session_new(struct j1939_priv *priv, struct ...

	ret = j1939_session_activate(session);
	if (ret) {
		if (ret == -EAGAIN)
			netdev_alert(priv->ndev, "%s: 0x%p: concurrent session with same addr (%02x %02x) is already active.\n",
			     __func__, session, skcb.addr.sa, skcb.addr.da);
		else
			netdev_warn(priv->ndev, "%s: 0x%p: session activation failed: %i\n",
				    __func__, session, ret);

		j1939_session_put(session);
		return NULL;

This can be done in a separate patch later.

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

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

* Re: [PATCH] can: j1939: make j1939_session_activate() fail if device is no longer registered
  2025-11-25 13:39 [PATCH] can: j1939: make j1939_session_activate() fail if device is no longer registered Tetsuo Handa
  2025-12-09  9:43 ` Tetsuo Handa
@ 2025-12-11  9:47 ` Oleksij Rempel
  2025-12-17  9:47 ` Marc Kleine-Budde
  2 siblings, 0 replies; 5+ messages in thread
From: Oleksij Rempel @ 2025-12-11  9:47 UTC (permalink / raw)
  To: Tetsuo Handa
  Cc: Robin van der Gracht, kernel, Oliver Hartkopp, Marc Kleine-Budde,
	linux-can

On Tue, Nov 25, 2025 at 10:39:59PM +0900, Tetsuo Handa wrote:
> syzbot is still reporting
> 
>   unregister_netdevice: waiting for vcan0 to become free. Usage count = 2
> 
> even after commit 93a27b5891b8 ("can: j1939: add missing calls in
> NETDEV_UNREGISTER notification handler") was added. A debug printk() patch
> found that j1939_session_activate() can succeed even after
> j1939_cancel_active_session() from j1939_netdev_notify(NETDEV_UNREGISTER)
> has completed.
> 
> Since j1939_cancel_active_session() is processed with the session list lock
> held, checking ndev->reg_state in j1939_session_activate() with the session
> list lock held can reliably close the race window.
> 
> Reported-by: syzbot <syzbot+881d65229ca4f9ae8c84@syzkaller.appspotmail.com>
> Closes: https://syzkaller.appspot.com/bug?extid=881d65229ca4f9ae8c84
> Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>

Acked-by: Oleksij Rempel <o.rempel@pengutronix.de>

Thank you!
-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

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

* Re: [PATCH] can: j1939: make j1939_session_activate() fail if device is no longer registered
  2025-11-25 13:39 [PATCH] can: j1939: make j1939_session_activate() fail if device is no longer registered Tetsuo Handa
  2025-12-09  9:43 ` Tetsuo Handa
  2025-12-11  9:47 ` Oleksij Rempel
@ 2025-12-17  9:47 ` Marc Kleine-Budde
  2 siblings, 0 replies; 5+ messages in thread
From: Marc Kleine-Budde @ 2025-12-17  9:47 UTC (permalink / raw)
  To: Tetsuo Handa
  Cc: Robin van der Gracht, Oleksij Rempel, kernel, Oliver Hartkopp,
	linux-can

[-- Attachment #1: Type: text/plain, Size: 1208 bytes --]

On 25.11.2025 22:39:59, Tetsuo Handa wrote:
> syzbot is still reporting
>
>   unregister_netdevice: waiting for vcan0 to become free. Usage count = 2
>
> even after commit 93a27b5891b8 ("can: j1939: add missing calls in
> NETDEV_UNREGISTER notification handler") was added. A debug printk() patch
> found that j1939_session_activate() can succeed even after
> j1939_cancel_active_session() from j1939_netdev_notify(NETDEV_UNREGISTER)
> has completed.
>
> Since j1939_cancel_active_session() is processed with the session list lock
> held, checking ndev->reg_state in j1939_session_activate() with the session
> list lock held can reliably close the race window.
>
> Reported-by: syzbot <syzbot+881d65229ca4f9ae8c84@syzkaller.appspotmail.com>
> Closes: https://syzkaller.appspot.com/bug?extid=881d65229ca4f9ae8c84
> Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>

Applied to linux-can.

Thanks,
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 #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

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

end of thread, other threads:[~2025-12-17  9:47 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-11-25 13:39 [PATCH] can: j1939: make j1939_session_activate() fail if device is no longer registered Tetsuo Handa
2025-12-09  9:43 ` Tetsuo Handa
2025-12-11  9:46   ` Oleksij Rempel
2025-12-11  9:47 ` Oleksij Rempel
2025-12-17  9:47 ` Marc Kleine-Budde

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