* [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