[syzbot] [wireless?] INFO: task hung in rfkill_unregister (3)

13 views
Skip to first unread message

syzbot

unread,
Jun 7, 2023, 5:59:01ā€ÆAM6/7/23
to da...@davemloft.net, edum...@google.com, joha...@sipsolutions.net, ku...@kernel.org, linux-...@vger.kernel.org, linux-w...@vger.kernel.org, net...@vger.kernel.org, pab...@redhat.com, syzkall...@googlegroups.com
Hello,

syzbot found the following issue on:

HEAD commit: eb0f1697d729 Merge branch 'for-next/core', remote-tracking..
git tree: git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux.git for-kernelci
console output: https://syzkaller.appspot.com/x/log.txt?x=17b656a5280000
kernel config: https://syzkaller.appspot.com/x/.config?x=8860074b9a9d6c45
dashboard link: https://syzkaller.appspot.com/bug?extid=bb540a4bbfb4ae3b425d
compiler: Debian clang version 15.0.7, GNU ld (GNU Binutils for Debian) 2.35.2
userspace arch: arm64
syz repro: https://syzkaller.appspot.com/x/repro.syz?x=122665a3280000
C reproducer: https://syzkaller.appspot.com/x/repro.c?x=13dc1c59280000

Downloadable assets:
disk image: https://storage.googleapis.com/syzbot-assets/034232da7cff/disk-eb0f1697.raw.xz
vmlinux: https://storage.googleapis.com/syzbot-assets/b11411bec33e/vmlinux-eb0f1697.xz
kernel image: https://storage.googleapis.com/syzbot-assets/a53c52e170dd/Image-eb0f1697.gz.xz

IMPORTANT: if you fix the issue, please add the following tag to the commit:
Reported-by: syzbot+bb540a...@syzkaller.appspotmail.com

INFO: task syz-executor410:6034 blocked for more than 143 seconds.
Not tainted 6.4.0-rc3-syzkaller-geb0f1697d729 #0
"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
task:syz-executor410 state:D stack:0 pid:6034 ppid:5996 flags:0x0000000c
Call trace:
__switch_to+0x320/0x754 arch/arm64/kernel/process.c:556
context_switch kernel/sched/core.c:5343 [inline]
__schedule+0x1368/0x23b8 kernel/sched/core.c:6669
schedule+0xc4/0x170 kernel/sched/core.c:6745
schedule_preempt_disabled+0x18/0x2c kernel/sched/core.c:6804
__mutex_lock_common+0xbd8/0x21a0 kernel/locking/mutex.c:679
__mutex_lock kernel/locking/mutex.c:747 [inline]
mutex_lock_nested+0x2c/0x38 kernel/locking/mutex.c:799
rfkill_unregister+0xb8/0x210 net/rfkill/core.c:1130
nfc_unregister_device+0x98/0x290 net/nfc/core.c:1167
nci_unregister_device+0x1dc/0x21c net/nfc/nci/core.c:1303
virtual_ncidev_close+0x5c/0xa0 drivers/nfc/virtual_ncidev.c:163
__fput+0x30c/0x7bc fs/file_table.c:321
____fput+0x20/0x30 fs/file_table.c:349
task_work_run+0x230/0x2e0 kernel/task_work.c:179
exit_task_work include/linux/task_work.h:38 [inline]
do_exit+0x63c/0x1f58 kernel/exit.c:871
do_group_exit+0x194/0x22c kernel/exit.c:1021
__do_sys_exit_group kernel/exit.c:1032 [inline]
__se_sys_exit_group kernel/exit.c:1030 [inline]
__wake_up_parent+0x0/0x60 kernel/exit.c:1030
__invoke_syscall arch/arm64/kernel/syscall.c:38 [inline]
invoke_syscall+0x98/0x2c0 arch/arm64/kernel/syscall.c:52
el0_svc_common+0x138/0x258 arch/arm64/kernel/syscall.c:142
do_el0_svc+0x64/0x198 arch/arm64/kernel/syscall.c:193
el0_svc+0x4c/0x15c arch/arm64/kernel/entry-common.c:637
el0t_64_sync_handler+0x84/0xf0 arch/arm64/kernel/entry-common.c:655
el0t_64_sync+0x190/0x194 arch/arm64/kernel/entry.S:591
INFO: task syz-executor410:6057 blocked for more than 143 seconds.
Not tainted 6.4.0-rc3-syzkaller-geb0f1697d729 #0
"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
task:syz-executor410 state:D stack:0 pid:6057 ppid:5997 flags:0x00000009
Call trace:
__switch_to+0x320/0x754 arch/arm64/kernel/process.c:556
context_switch kernel/sched/core.c:5343 [inline]
__schedule+0x1368/0x23b8 kernel/sched/core.c:6669
schedule+0xc4/0x170 kernel/sched/core.c:6745
schedule_preempt_disabled+0x18/0x2c kernel/sched/core.c:6804
__mutex_lock_common+0xbd8/0x21a0 kernel/locking/mutex.c:679
__mutex_lock kernel/locking/mutex.c:747 [inline]
mutex_lock_nested+0x2c/0x38 kernel/locking/mutex.c:799
device_lock include/linux/device.h:837 [inline]
nfc_dev_down net/nfc/core.c:143 [inline]
nfc_rfkill_set_block+0x50/0x2d0 net/nfc/core.c:179
rfkill_set_block+0x18c/0x37c net/rfkill/core.c:345
rfkill_fop_write+0x578/0x734 net/rfkill/core.c:1286
vfs_write+0x2a0/0x918 fs/read_write.c:582
ksys_write+0x15c/0x26c fs/read_write.c:637
__do_sys_write fs/read_write.c:649 [inline]
__se_sys_write fs/read_write.c:646 [inline]
__arm64_sys_write+0x7c/0x90 fs/read_write.c:646
__invoke_syscall arch/arm64/kernel/syscall.c:38 [inline]
invoke_syscall+0x98/0x2c0 arch/arm64/kernel/syscall.c:52
el0_svc_common+0x138/0x258 arch/arm64/kernel/syscall.c:142
do_el0_svc+0x64/0x198 arch/arm64/kernel/syscall.c:193
el0_svc+0x4c/0x15c arch/arm64/kernel/entry-common.c:637
el0t_64_sync_handler+0x84/0xf0 arch/arm64/kernel/entry-common.c:655
el0t_64_sync+0x190/0x194 arch/arm64/kernel/entry.S:591
INFO: task syz-executor410:6061 blocked for more than 143 seconds.
Not tainted 6.4.0-rc3-syzkaller-geb0f1697d729 #0
"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
task:syz-executor410 state:D stack:0 pid:6061 ppid:5992 flags:0x00000009
Call trace:
__switch_to+0x320/0x754 arch/arm64/kernel/process.c:556
context_switch kernel/sched/core.c:5343 [inline]
__schedule+0x1368/0x23b8 kernel/sched/core.c:6669
schedule+0xc4/0x170 kernel/sched/core.c:6745
schedule_preempt_disabled+0x18/0x2c kernel/sched/core.c:6804
__mutex_lock_common+0xbd8/0x21a0 kernel/locking/mutex.c:679
__mutex_lock kernel/locking/mutex.c:747 [inline]
mutex_lock_nested+0x2c/0x38 kernel/locking/mutex.c:799
rfkill_register+0x44/0x7a4 net/rfkill/core.c:1057
nfc_register_device+0x148/0x310 net/nfc/core.c:1132
nci_register_device+0x6ac/0x7c4 net/nfc/nci/core.c:1257
virtual_ncidev_open+0x13c/0x1bc drivers/nfc/virtual_ncidev.c:148
misc_open+0x2f0/0x368 drivers/char/misc.c:165
chrdev_open+0x3e8/0x4fc fs/char_dev.c:414
do_dentry_open+0x724/0xf90 fs/open.c:920
vfs_open+0x7c/0x90 fs/open.c:1051
do_open fs/namei.c:3636 [inline]
path_openat+0x1f2c/0x27f8 fs/namei.c:3791
do_filp_open+0x1bc/0x3cc fs/namei.c:3818
do_sys_openat2+0x128/0x3d8 fs/open.c:1356
do_sys_open fs/open.c:1372 [inline]
__do_sys_openat fs/open.c:1388 [inline]
__se_sys_openat fs/open.c:1383 [inline]
__arm64_sys_openat+0x1f0/0x240 fs/open.c:1383
__invoke_syscall arch/arm64/kernel/syscall.c:38 [inline]
invoke_syscall+0x98/0x2c0 arch/arm64/kernel/syscall.c:52
el0_svc_common+0x138/0x258 arch/arm64/kernel/syscall.c:142
do_el0_svc+0x64/0x198 arch/arm64/kernel/syscall.c:193
el0_svc+0x4c/0x15c arch/arm64/kernel/entry-common.c:637
el0t_64_sync_handler+0x84/0xf0 arch/arm64/kernel/entry-common.c:655
el0t_64_sync+0x190/0x194 arch/arm64/kernel/entry.S:591
INFO: task syz-executor410:6066 blocked for more than 143 seconds.
Not tainted 6.4.0-rc3-syzkaller-geb0f1697d729 #0
"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
task:syz-executor410 state:D stack:0 pid:6066 ppid:5994 flags:0x00000001
Call trace:
__switch_to+0x320/0x754 arch/arm64/kernel/process.c:556
context_switch kernel/sched/core.c:5343 [inline]
__schedule+0x1368/0x23b8 kernel/sched/core.c:6669
schedule+0xc4/0x170 kernel/sched/core.c:6745
schedule_preempt_disabled+0x18/0x2c kernel/sched/core.c:6804
__mutex_lock_common+0xbd8/0x21a0 kernel/locking/mutex.c:679
__mutex_lock kernel/locking/mutex.c:747 [inline]
mutex_lock_nested+0x2c/0x38 kernel/locking/mutex.c:799
misc_open+0x6c/0x368 drivers/char/misc.c:129
chrdev_open+0x3e8/0x4fc fs/char_dev.c:414
do_dentry_open+0x724/0xf90 fs/open.c:920
vfs_open+0x7c/0x90 fs/open.c:1051
do_open fs/namei.c:3636 [inline]
path_openat+0x1f2c/0x27f8 fs/namei.c:3791
do_filp_open+0x1bc/0x3cc fs/namei.c:3818
do_sys_openat2+0x128/0x3d8 fs/open.c:1356
do_sys_open fs/open.c:1372 [inline]
__do_sys_openat fs/open.c:1388 [inline]
__se_sys_openat fs/open.c:1383 [inline]
__arm64_sys_openat+0x1f0/0x240 fs/open.c:1383
__invoke_syscall arch/arm64/kernel/syscall.c:38 [inline]
invoke_syscall+0x98/0x2c0 arch/arm64/kernel/syscall.c:52
el0_svc_common+0x138/0x258 arch/arm64/kernel/syscall.c:142
do_el0_svc+0x64/0x198 arch/arm64/kernel/syscall.c:193
el0_svc+0x4c/0x15c arch/arm64/kernel/entry-common.c:637
el0t_64_sync_handler+0x84/0xf0 arch/arm64/kernel/entry-common.c:655
el0t_64_sync+0x190/0x194 arch/arm64/kernel/entry.S:591
INFO: task syz-executor410:6071 blocked for more than 143 seconds.
Not tainted 6.4.0-rc3-syzkaller-geb0f1697d729 #0
"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
task:syz-executor410 state:D stack:0 pid:6071 ppid:5995 flags:0x00000001
Call trace:
__switch_to+0x320/0x754 arch/arm64/kernel/process.c:556
context_switch kernel/sched/core.c:5343 [inline]
__schedule+0x1368/0x23b8 kernel/sched/core.c:6669
schedule+0xc4/0x170 kernel/sched/core.c:6745
schedule_preempt_disabled+0x18/0x2c kernel/sched/core.c:6804
__mutex_lock_common+0xbd8/0x21a0 kernel/locking/mutex.c:679
__mutex_lock kernel/locking/mutex.c:747 [inline]
mutex_lock_nested+0x2c/0x38 kernel/locking/mutex.c:799
misc_open+0x6c/0x368 drivers/char/misc.c:129
chrdev_open+0x3e8/0x4fc fs/char_dev.c:414
do_dentry_open+0x724/0xf90 fs/open.c:920
vfs_open+0x7c/0x90 fs/open.c:1051
do_open fs/namei.c:3636 [inline]
path_openat+0x1f2c/0x27f8 fs/namei.c:3791
do_filp_open+0x1bc/0x3cc fs/namei.c:3818
do_sys_openat2+0x128/0x3d8 fs/open.c:1356
do_sys_open fs/open.c:1372 [inline]
__do_sys_openat fs/open.c:1388 [inline]
__se_sys_openat fs/open.c:1383 [inline]
__arm64_sys_openat+0x1f0/0x240 fs/open.c:1383
__invoke_syscall arch/arm64/kernel/syscall.c:38 [inline]
invoke_syscall+0x98/0x2c0 arch/arm64/kernel/syscall.c:52
el0_svc_common+0x138/0x258 arch/arm64/kernel/syscall.c:142
do_el0_svc+0x64/0x198 arch/arm64/kernel/syscall.c:193
el0_svc+0x4c/0x15c arch/arm64/kernel/entry-common.c:637
el0t_64_sync_handler+0x84/0xf0 arch/arm64/kernel/entry-common.c:655
el0t_64_sync+0x190/0x194 arch/arm64/kernel/entry.S:591
INFO: task kworker/1:9:6072 blocked for more than 143 seconds.
Not tainted 6.4.0-rc3-syzkaller-geb0f1697d729 #0
"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
task:kworker/1:9 state:D stack:0 pid:6072 ppid:2 flags:0x00000008
Workqueue: events rfkill_global_led_trigger_worker
Call trace:
__switch_to+0x320/0x754 arch/arm64/kernel/process.c:556
context_switch kernel/sched/core.c:5343 [inline]
__schedule+0x1368/0x23b8 kernel/sched/core.c:6669
schedule+0xc4/0x170 kernel/sched/core.c:6745
schedule_preempt_disabled+0x18/0x2c kernel/sched/core.c:6804
__mutex_lock_common+0xbd8/0x21a0 kernel/locking/mutex.c:679
__mutex_lock kernel/locking/mutex.c:747 [inline]
mutex_lock_nested+0x2c/0x38 kernel/locking/mutex.c:799
rfkill_global_led_trigger_worker+0x30/0xe4 net/rfkill/core.c:181
process_one_work+0x788/0x12d4 kernel/workqueue.c:2405
worker_thread+0x8e0/0xfe8 kernel/workqueue.c:2552
kthread+0x288/0x310 kernel/kthread.c:379
ret_from_fork+0x10/0x20 arch/arm64/kernel/entry.S:853
INFO: task syz-executor410:6076 blocked for more than 143 seconds.
Not tainted 6.4.0-rc3-syzkaller-geb0f1697d729 #0
"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
task:syz-executor410 state:D stack:0 pid:6076 ppid:5991 flags:0x00000001
Call trace:
__switch_to+0x320/0x754 arch/arm64/kernel/process.c:556
context_switch kernel/sched/core.c:5343 [inline]
__schedule+0x1368/0x23b8 kernel/sched/core.c:6669
schedule+0xc4/0x170 kernel/sched/core.c:6745
schedule_preempt_disabled+0x18/0x2c kernel/sched/core.c:6804
__mutex_lock_common+0xbd8/0x21a0 kernel/locking/mutex.c:679
__mutex_lock kernel/locking/mutex.c:747 [inline]
mutex_lock_nested+0x2c/0x38 kernel/locking/mutex.c:799
misc_open+0x6c/0x368 drivers/char/misc.c:129
chrdev_open+0x3e8/0x4fc fs/char_dev.c:414
do_dentry_open+0x724/0xf90 fs/open.c:920
vfs_open+0x7c/0x90 fs/open.c:1051
do_open fs/namei.c:3636 [inline]
path_openat+0x1f2c/0x27f8 fs/namei.c:3791
do_filp_open+0x1bc/0x3cc fs/namei.c:3818
do_sys_openat2+0x128/0x3d8 fs/open.c:1356
do_sys_open fs/open.c:1372 [inline]
__do_sys_openat fs/open.c:1388 [inline]
__se_sys_openat fs/open.c:1383 [inline]
__arm64_sys_openat+0x1f0/0x240 fs/open.c:1383
__invoke_syscall arch/arm64/kernel/syscall.c:38 [inline]
invoke_syscall+0x98/0x2c0 arch/arm64/kernel/syscall.c:52
el0_svc_common+0x138/0x258 arch/arm64/kernel/syscall.c:142
do_el0_svc+0x64/0x198 arch/arm64/kernel/syscall.c:193
el0_svc+0x4c/0x15c arch/arm64/kernel/entry-common.c:637
el0t_64_sync_handler+0x84/0xf0 arch/arm64/kernel/entry-common.c:655
el0t_64_sync+0x190/0x194 arch/arm64/kernel/entry.S:591

Showing all locks held in the system:
1 lock held by rcu_tasks_kthre/13:
#0: ffff800016091050 (rcu_tasks.tasks_gp_mutex){+.+.}-{3:3}, at: rcu_tasks_one_gp+0x44/0xcf4 kernel/rcu/tasks.h:518
1 lock held by rcu_tasks_trace/14:
#0: ffff800016091410 (rcu_tasks_trace.tasks_gp_mutex){+.+.}-{3:3}, at: rcu_tasks_one_gp+0x44/0xcf4 kernel/rcu/tasks.h:518
1 lock held by khungtaskd/28:
#0: ffff800016090e80 (rcu_read_lock){....}-{1:2}, at: rcu_lock_acquire+0xc/0x44 include/linux/rcupdate.h:326
2 locks held by getty/5732:
#0: ffff0000cfe85098 (&tty->ldisc_sem){++++}-{0:0}, at: ldsem_down_read+0x3c/0x4c drivers/tty/tty_ldsem.c:340
#1: ffff80001ae102f0 (&ldata->atomic_read_lock){+.+.}-{3:3}, at: n_tty_read+0x414/0x1210 drivers/tty/n_tty.c:2176
2 locks held by syz-executor410/6034:
#0: ffff0000c9cad100 (&dev->mutex){....}-{3:3}, at: device_lock include/linux/device.h:837 [inline]
#0: ffff0000c9cad100 (&dev->mutex){....}-{3:3}, at: nfc_unregister_device+0x6c/0x290 net/nfc/core.c:1165
#1: ffff800018a57008 (rfkill_global_mutex){+.+.}-{3:3}, at: rfkill_unregister+0xb8/0x210 net/rfkill/core.c:1130
2 locks held by syz-executor410/6057:
#0: ffff800018a57008 (rfkill_global_mutex){+.+.}-{3:3}, at: rfkill_fop_write+0x234/0x734 net/rfkill/core.c:1278
#1: ffff0000c9cad100 (&dev->mutex){....}-{3:3}, at: device_lock include/linux/device.h:837 [inline]
#1: ffff0000c9cad100 (&dev->mutex){....}-{3:3}, at: nfc_dev_down net/nfc/core.c:143 [inline]
#1: ffff0000c9cad100 (&dev->mutex){....}-{3:3}, at: nfc_rfkill_set_block+0x50/0x2d0 net/nfc/core.c:179
3 locks held by syz-executor410/6061:
#0: ffff800017499f48 (misc_mtx){+.+.}-{3:3}, at: misc_open+0x6c/0x368 drivers/char/misc.c:129
#1: ffff0000dcd19100 (&dev->mutex){....}-{3:3}, at: device_lock include/linux/device.h:837 [inline]
#1: ffff0000dcd19100 (&dev->mutex){....}-{3:3}, at: nfc_register_device+0xb4/0x310 net/nfc/core.c:1128
#2: ffff800018a57008 (rfkill_global_mutex){+.+.}-{3:3}, at: rfkill_register+0x44/0x7a4 net/rfkill/core.c:1057
1 lock held by syz-executor410/6066:
#0: ffff800017499f48 (misc_mtx){+.+.}-{3:3}, at: misc_open+0x6c/0x368 drivers/char/misc.c:129
1 lock held by syz-executor410/6071:
#0: ffff800017499f48 (misc_mtx){+.+.}-{3:3}, at: misc_open+0x6c/0x368 drivers/char/misc.c:129
3 locks held by kworker/1:9/6072:
#0: ffff0000c0020d38 ((wq_completion)events){+.+.}-{0:0}, at: process_one_work+0x664/0x12d4 kernel/workqueue.c:2378
#1: ffff80001f037c20 ((work_completion)(&rfkill_global_led_trigger_work)){+.+.}-{0:0}, at: process_one_work+0x6a8/0x12d4 kernel/workqueue.c:2380
#2: ffff800018a57008 (rfkill_global_mutex){+.+.}-{3:3}, at: rfkill_global_led_trigger_worker+0x30/0xe4 net/rfkill/core.c:181
1 lock held by syz-executor410/6076:
#0: ffff800017499f48 (misc_mtx){+.+.}-{3:3}, at: misc_open+0x6c/0x368 drivers/char/misc.c:129

=============================================



---
This report is generated by a bot. It may contain errors.
See https://goo.gl/tpsmEJ for more information about syzbot.
syzbot engineers can be reached at syzk...@googlegroups.com.

syzbot will keep track of this issue. See:
https://goo.gl/tpsmEJ#status for how to communicate with syzbot.

If the bug is already fixed, let syzbot know by replying with:
#syz fix: exact-commit-title

If you want syzbot to run the reproducer, reply with:
#syz test: git://repo/address.git branch-or-commit-hash
If you attach or paste a git patch, syzbot will apply it before testing.

If you want to change bug's subsystems, reply with:
#syz set subsystems: new-subsystem
(See the list of subsystem names on the web dashboard)

If the bug is a duplicate of another bug, reply with:
#syz dup: exact-subject-of-another-report

If you want to undo deduplication, reply with:
#syz undup

Johannes Berg

unread,
Jun 7, 2023, 6:39:51ā€ÆAM6/7/23
to syzbot, da...@davemloft.net, edum...@google.com, ku...@kernel.org, linux-...@vger.kernel.org, linux-w...@vger.kernel.org, net...@vger.kernel.org, pab...@redhat.com, syzkall...@googlegroups.com, Krzysztof Kozlowski, Bongsu Jeon
This seems like an issue with the virtual NFC device. I feel we had this
before?

johannes

Hillf Danton

unread,
Jul 30, 2023, 4:46:03ā€ÆAM7/30/23
to syzbot, linux-...@vger.kernel.org, syzkall...@googlegroups.com
On Wed, 07 Jun 2023 02:58:59 -0700
> HEAD commit: eb0f1697d729 Merge branch 'for-next/core', remote-tracking..
> git tree: git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux.git for-kernelci
> C reproducer: https://syzkaller.appspot.com/x/repro.c?x=13dc1c59280000

Un/register rfkill without the generic device lock held to avoid deadlock.

cpu2 cpu3
==== ====
&dev->mutex
rfkill_global_mutex
&dev->mutex
rfkill_global_mutex

#syz test https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master

--- x/net/nfc/core.c
+++ y/net/nfc/core.c
@@ -1110,6 +1110,7 @@ EXPORT_SYMBOL(nfc_allocate_device);
int nfc_register_device(struct nfc_dev *dev)
{
int rc;
+ struct rfkill *rfkill;

pr_debug("dev_name=%s\n", dev_name(&dev->dev));

@@ -1125,15 +1126,14 @@ int nfc_register_device(struct nfc_dev *
if (rc)
pr_err("Could not register llcp device\n");

- device_lock(&dev->dev);
- dev->rfkill = rfkill_alloc(dev_name(&dev->dev), &dev->dev,
- RFKILL_TYPE_NFC, &nfc_rfkill_ops, dev);
- if (dev->rfkill) {
- if (rfkill_register(dev->rfkill) < 0) {
- rfkill_destroy(dev->rfkill);
- dev->rfkill = NULL;
- }
+ rfkill = rfkill_alloc(dev_name(&dev->dev), &dev->dev, RFKILL_TYPE_NFC,
+ &nfc_rfkill_ops, dev);
+ if (rfkill && rfkill_register(rfkill) < 0) {
+ rfkill_destroy(rfkill);
+ rfkill = NULL;
}
+ device_lock(&dev->dev);
+ dev->rfkill = rfkill;
dev->shutting_down = false;
device_unlock(&dev->dev);

@@ -1154,6 +1154,7 @@ EXPORT_SYMBOL(nfc_register_device);
void nfc_unregister_device(struct nfc_dev *dev)
{
int rc;
+ struct rfkill *rfkill = NULL;

pr_debug("dev_name=%s\n", dev_name(&dev->dev));

@@ -1164,13 +1165,16 @@ void nfc_unregister_device(struct nfc_de

device_lock(&dev->dev);
if (dev->rfkill) {
- rfkill_unregister(dev->rfkill);
- rfkill_destroy(dev->rfkill);
+ rfkill = dev->rfkill;
dev->rfkill = NULL;
}
dev->shutting_down = true;
device_unlock(&dev->dev);

+ if (rfkill) {
+ rfkill_unregister(rfkill);
+ rfkill_destroy(rfkill);
+ }
if (dev->ops->check_presence) {
del_timer_sync(&dev->check_pres_timer);
cancel_work_sync(&dev->check_pres_work);
--

syzbot

unread,
Jul 30, 2023, 5:13:37ā€ÆAM7/30/23
to hda...@sina.com, linux-...@vger.kernel.org, syzkall...@googlegroups.com
Hello,

syzbot has tested the proposed patch but the reproducer is still triggering an issue:
BUG: corrupted list in nfc_llcp_register_device

list_add corruption. next->prev should be prev (ffff800090c7cc20), but was dead000000000122. (next=ffff0000e3ceb000).
------------[ cut here ]------------
kernel BUG at lib/list_debug.c:29!
Internal error: Oops - BUG: 00000000f2000800 [#1] PREEMPT SMP
Modules linked in:
CPU: 0 PID: 13850 Comm: syz-executor304 Not tainted 6.5.0-rc3-syzkaller-00297-gd31e3792919e-dirty #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 07/12/2023
pstate: 60400005 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
pc : __list_add_valid+0xf4/0x110 lib/list_debug.c:27
lr : __list_add_valid+0xf4/0x110 lib/list_debug.c:27
sp : ffff80009ec57320
x29: ffff80009ec57320 x28: dfff800000000000 x27: 1fffe0001c79dc0d
x26: 1fffe00019d23801 x25: 1fffe00019d23800 x24: dfff800000000000
x23: dfff800000000000 x22: ffff0000e3ceb008 x21: ffff0000ce91c000
x20: ffff800090c7cc20 x19: ffff0000e3ceb000 x18: ffff80009ec56980
x17: 3032636337633039 x16: ffff80008a56521c x15: 0000000000000001
x14: 1ffff00013d8adbc x13: 0000000000000000 x12: 0000000000000000
x11: 0000000000000000 x10: 0000000000000000 x9 : 0b5847480dd8ce00
x8 : 0b5847480dd8ce00 x7 : 0000000000000001 x6 : 0000000000000001
x5 : ffff80009ec56c38 x4 : ffff80008e14ef00 x3 : ffff800082ad14b8
x2 : 0000000000000001 x1 : 0000000100000000 x0 : 0000000000000075
Call trace:
__list_add_valid+0xf4/0x110 lib/list_debug.c:27
__list_add include/linux/list.h:69 [inline]
list_add include/linux/list.h:88 [inline]
nfc_llcp_register_device+0x58c/0x6bc net/nfc/llcp_core.c:1639
nfc_register_device+0x88/0x2e4 net/nfc/core.c:1125
nci_register_device+0x6ac/0x7c4 net/nfc/nci/core.c:1257
virtual_ncidev_open+0x13c/0x1bc drivers/nfc/virtual_ncidev.c:148
misc_open+0x2f0/0x368 drivers/char/misc.c:165
chrdev_open+0x3e8/0x4fc fs/char_dev.c:414
do_dentry_open+0x710/0x11b8 fs/open.c:914
vfs_open+0x7c/0x90 fs/open.c:1048
do_open fs/namei.c:3636 [inline]
path_openat+0x1f2c/0x27f8 fs/namei.c:3793
do_filp_open+0x1bc/0x3cc fs/namei.c:3820
do_sys_openat2+0x124/0x1b8 fs/open.c:1407
do_sys_open fs/open.c:1422 [inline]
__do_sys_openat fs/open.c:1438 [inline]
__se_sys_openat fs/open.c:1433 [inline]
__arm64_sys_openat+0x1f0/0x240 fs/open.c:1433
__invoke_syscall arch/arm64/kernel/syscall.c:38 [inline]
invoke_syscall+0x98/0x2c0 arch/arm64/kernel/syscall.c:52
el0_svc_common+0x138/0x244 arch/arm64/kernel/syscall.c:139
do_el0_svc+0x64/0x198 arch/arm64/kernel/syscall.c:188
el0_svc+0x4c/0x160 arch/arm64/kernel/entry-common.c:647
el0t_64_sync_handler+0x84/0xfc arch/arm64/kernel/entry-common.c:665
el0t_64_sync+0x190/0x194 arch/arm64/kernel/entry.S:591
Code: 91098000 aa1403e1 aa1303e3 95e86b4d (d4210000)
---[ end trace 0000000000000000 ]---


Tested on:

commit: d31e3792 Merge tag '6.5-rc3-smb3-client-fixes' of git:..
git tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
console output: https://syzkaller.appspot.com/x/log.txt?x=14847039a80000
kernel config: https://syzkaller.appspot.com/x/.config?x=32bbbdc67cf060fa
dashboard link: https://syzkaller.appspot.com/bug?extid=bb540a4bbfb4ae3b425d
compiler: Debian clang version 15.0.6, GNU ld (GNU Binutils for Debian) 2.40
userspace arch: arm64
patch: https://syzkaller.appspot.com/x/patch.diff?x=142be711a80000

Hillf Danton

unread,
Jul 30, 2023, 6:59:18ā€ÆAM7/30/23
to syzbot, linux-...@vger.kernel.org, syzkall...@googlegroups.com
On Wed, 07 Jun 2023 02:58:59 -0700
> HEAD commit: eb0f1697d729 Merge branch 'for-next/core', remote-tracking..
> git tree: git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux.git for-kernelci
--- x/net/nfc/llcp_core.c
+++ y/net/nfc/llcp_core.c
@@ -1636,7 +1636,9 @@ int nfc_llcp_register_device(struct nfc_
timer_setup(&local->sdreq_timer, nfc_llcp_sdreq_timer, 0);
INIT_WORK(&local->sdreq_timeout_work, nfc_llcp_sdreq_timeout_work);

+ spin_lock(&llcp_devices_lock);
list_add(&local->list, &llcp_devices);
+ spin_unlock(&llcp_devices_lock);

return 0;
}
--

syzbot

unread,
Jul 30, 2023, 7:27:23ā€ÆAM7/30/23
to hda...@sina.com, linux-...@vger.kernel.org, syzkall...@googlegroups.com
Hello,

syzbot has tested the proposed patch and the reproducer did not trigger any issue:

Reported-and-tested-by: syzbot+bb540a...@syzkaller.appspotmail.com

Tested on:

commit: d31e3792 Merge tag '6.5-rc3-smb3-client-fixes' of git:..
git tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
console output: https://syzkaller.appspot.com/x/log.txt?x=141df2d9a80000
kernel config: https://syzkaller.appspot.com/x/.config?x=32bbbdc67cf060fa
dashboard link: https://syzkaller.appspot.com/bug?extid=bb540a4bbfb4ae3b425d
compiler: Debian clang version 15.0.6, GNU ld (GNU Binutils for Debian) 2.40
userspace arch: arm64
patch: https://syzkaller.appspot.com/x/patch.diff?x=17dfa639a80000

Note: testing is done by a robot and is best-effort only.
Reply all
Reply to author
Forward
0 new messages