* [syzbot] [bluetooth?] KASAN: slab-use-after-free Read in l2cap_send_cmd
@ 2024-02-26 9:32 syzbot
2025-01-06 9:04 ` syzbot
2025-01-14 14:09 ` [syzbot] [bluetooth?] KASAN: slab-use-after-free Read in l2cap_send_cmd syzbot
0 siblings, 2 replies; 9+ messages in thread
From: syzbot @ 2024-02-26 9:32 UTC (permalink / raw)
To: johan.hedberg, linux-bluetooth, linux-kernel, luiz.dentz, marcel,
syzkaller-bugs
Hello,
syzbot found the following issue on:
HEAD commit: b401b621758e Linux 6.8-rc5
git tree: upstream
console output: https://syzkaller.appspot.com/x/log.txt?x=12f63152180000
kernel config: https://syzkaller.appspot.com/x/.config?x=eff9f3183d0a20dd
dashboard link: https://syzkaller.appspot.com/bug?extid=31c2f641b850a348a734
compiler: Debian clang version 15.0.6, GNU ld (GNU Binutils for Debian) 2.40
Unfortunately, I don't have any reproducer for this issue yet.
Downloadable assets:
disk image: https://storage.googleapis.com/syzbot-assets/d31bbc7def2b/disk-b401b621.raw.xz
vmlinux: https://storage.googleapis.com/syzbot-assets/92891f219eae/vmlinux-b401b621.xz
kernel image: https://storage.googleapis.com/syzbot-assets/aedf35bce0a0/bzImage-b401b621.xz
IMPORTANT: if you fix the issue, please add the following tag to the commit:
Reported-by: syzbot+31c2f641b850a348a734@syzkaller.appspotmail.com
==================================================================
BUG: KASAN: slab-use-after-free in l2cap_build_cmd net/bluetooth/l2cap_core.c:3100 [inline]
BUG: KASAN: slab-use-after-free in l2cap_send_cmd+0x679/0x8d0 net/bluetooth/l2cap_core.c:958
Read of size 4 at addr ffff88802b3d7010 by task kworker/u5:7/5112
CPU: 0 PID: 5112 Comm: kworker/u5:7 Not tainted 6.8.0-rc5-syzkaller #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/25/2024
Workqueue: hci3 hci_rx_work
Call Trace:
<TASK>
__dump_stack lib/dump_stack.c:88 [inline]
dump_stack_lvl+0x1e7/0x2e0 lib/dump_stack.c:106
print_address_description mm/kasan/report.c:377 [inline]
print_report+0x167/0x540 mm/kasan/report.c:488
kasan_report+0x142/0x180 mm/kasan/report.c:601
l2cap_build_cmd net/bluetooth/l2cap_core.c:3100 [inline]
l2cap_send_cmd+0x679/0x8d0 net/bluetooth/l2cap_core.c:958
l2cap_recv_frame+0xfe9/0x8bd0
hci_acldata_packet net/bluetooth/hci_core.c:3875 [inline]
hci_rx_work+0x50f/0xca0 net/bluetooth/hci_core.c:4110
process_one_work kernel/workqueue.c:2633 [inline]
process_scheduled_works+0x915/0x1420 kernel/workqueue.c:2706
worker_thread+0xa5f/0x1000 kernel/workqueue.c:2787
kthread+0x2f1/0x390 kernel/kthread.c:388
ret_from_fork+0x4d/0x80 arch/x86/kernel/process.c:147
ret_from_fork_asm+0x1b/0x30 arch/x86/entry/entry_64.S:242
</TASK>
Allocated by task 5104:
kasan_save_stack mm/kasan/common.c:47 [inline]
kasan_save_track+0x3f/0x80 mm/kasan/common.c:68
poison_kmalloc_redzone mm/kasan/common.c:372 [inline]
__kasan_kmalloc+0x98/0xb0 mm/kasan/common.c:389
kasan_kmalloc include/linux/kasan.h:211 [inline]
kmalloc_trace+0x1d6/0x360 mm/slub.c:4012
kmalloc include/linux/slab.h:590 [inline]
kzalloc include/linux/slab.h:711 [inline]
l2cap_conn_add+0xb6/0xc10 net/bluetooth/l2cap_core.c:7855
l2cap_connect_cfm+0x138/0x1290 net/bluetooth/l2cap_core.c:8252
hci_connect_cfm+0xa4/0x150 include/net/bluetooth/hci_core.h:1986
le_conn_complete_evt+0xd10/0x1290 net/bluetooth/hci_event.c:6025
hci_le_conn_complete_evt+0x18c/0x420 net/bluetooth/hci_event.c:6051
hci_event_func net/bluetooth/hci_event.c:7679 [inline]
hci_event_packet+0xa59/0x1540 net/bluetooth/hci_event.c:7734
hci_rx_work+0x3e8/0xca0 net/bluetooth/hci_core.c:4105
process_one_work kernel/workqueue.c:2633 [inline]
process_scheduled_works+0x915/0x1420 kernel/workqueue.c:2706
worker_thread+0xa5f/0x1000 kernel/workqueue.c:2787
kthread+0x2f1/0x390 kernel/kthread.c:388
ret_from_fork+0x4d/0x80 arch/x86/kernel/process.c:147
ret_from_fork_asm+0x1b/0x30 arch/x86/entry/entry_64.S:242
Freed by task 5316:
kasan_save_stack mm/kasan/common.c:47 [inline]
kasan_save_track+0x3f/0x80 mm/kasan/common.c:68
kasan_save_free_info+0x4e/0x60 mm/kasan/generic.c:640
poison_slab_object+0xa6/0xe0 mm/kasan/common.c:241
__kasan_slab_free+0x34/0x70 mm/kasan/common.c:257
kasan_slab_free include/linux/kasan.h:184 [inline]
slab_free_hook mm/slub.c:2121 [inline]
slab_free mm/slub.c:4299 [inline]
kfree+0x14a/0x380 mm/slub.c:4409
l2cap_connect_cfm+0x121/0x1290 net/bluetooth/l2cap_core.c:8248
hci_connect_cfm include/net/bluetooth/hci_core.h:1986 [inline]
hci_conn_failed+0x1f8/0x340 net/bluetooth/hci_conn.c:1289
hci_abort_conn_sync+0x583/0xde0 net/bluetooth/hci_sync.c:5356
hci_cmd_sync_work+0x22d/0x400 net/bluetooth/hci_sync.c:306
process_one_work kernel/workqueue.c:2633 [inline]
process_scheduled_works+0x915/0x1420 kernel/workqueue.c:2706
worker_thread+0xa5f/0x1000 kernel/workqueue.c:2787
kthread+0x2f1/0x390 kernel/kthread.c:388
ret_from_fork+0x4d/0x80 arch/x86/kernel/process.c:147
ret_from_fork_asm+0x1b/0x30 arch/x86/entry/entry_64.S:242
Last potentially related work creation:
kasan_save_stack+0x3f/0x60 mm/kasan/common.c:47
__kasan_record_aux_stack+0xae/0x100 mm/kasan/generic.c:586
insert_work+0x3e/0x330 kernel/workqueue.c:1653
__queue_work+0xcdb/0x1000 kernel/workqueue.c:1806
queue_work_on+0x14f/0x250 kernel/workqueue.c:1837
queue_work include/linux/workqueue.h:548 [inline]
l2cap_conn_ready net/bluetooth/l2cap_core.c:1779 [inline]
l2cap_connect_cfm+0xf34/0x1290 net/bluetooth/l2cap_core.c:8293
hci_connect_cfm+0xa4/0x150 include/net/bluetooth/hci_core.h:1986
le_conn_complete_evt+0xd10/0x1290 net/bluetooth/hci_event.c:6025
hci_le_conn_complete_evt+0x18c/0x420 net/bluetooth/hci_event.c:6051
hci_event_func net/bluetooth/hci_event.c:7679 [inline]
hci_event_packet+0xa59/0x1540 net/bluetooth/hci_event.c:7734
hci_rx_work+0x3e8/0xca0 net/bluetooth/hci_core.c:4105
process_one_work kernel/workqueue.c:2633 [inline]
process_scheduled_works+0x915/0x1420 kernel/workqueue.c:2706
worker_thread+0xa5f/0x1000 kernel/workqueue.c:2787
kthread+0x2f1/0x390 kernel/kthread.c:388
ret_from_fork+0x4d/0x80 arch/x86/kernel/process.c:147
ret_from_fork_asm+0x1b/0x30 arch/x86/entry/entry_64.S:242
The buggy address belongs to the object at ffff88802b3d7000
which belongs to the cache kmalloc-1k of size 1024
The buggy address is located 16 bytes inside of
freed 1024-byte region [ffff88802b3d7000, ffff88802b3d7400)
The buggy address belongs to the physical page:
page:ffffea0000acf400 refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x2b3d0
head:ffffea0000acf400 order:3 entire_mapcount:0 nr_pages_mapped:0 pincount:0
flags: 0xfff00000000840(slab|head|node=0|zone=1|lastcpupid=0x7ff)
page_type: 0xffffffff()
raw: 00fff00000000840 ffff888014c41dc0 ffffea000080da00 dead000000000002
raw: 0000000000000000 0000000000100010 00000001ffffffff 0000000000000000
page dumped because: kasan: bad access detected
page_owner tracks the page as allocated
page last allocated via order 3, migratetype Unmovable, gfp_mask 0xd20c0(__GFP_IO|__GFP_FS|__GFP_NOWARN|__GFP_NORETRY|__GFP_COMP|__GFP_NOMEMALLOC), pid 1, tgid 1 (swapper/0), ts 17603844133, free_ts 0
set_page_owner include/linux/page_owner.h:31 [inline]
post_alloc_hook+0x1ea/0x210 mm/page_alloc.c:1533
prep_new_page mm/page_alloc.c:1540 [inline]
get_page_from_freelist+0x33ea/0x3580 mm/page_alloc.c:3311
__alloc_pages+0x255/0x680 mm/page_alloc.c:4567
__alloc_pages_node include/linux/gfp.h:238 [inline]
alloc_pages_node include/linux/gfp.h:261 [inline]
alloc_slab_page+0x5f/0x160 mm/slub.c:2190
allocate_slab mm/slub.c:2354 [inline]
new_slab+0x84/0x2f0 mm/slub.c:2407
___slab_alloc+0xd17/0x13e0 mm/slub.c:3540
__slab_alloc mm/slub.c:3625 [inline]
__slab_alloc_node mm/slub.c:3678 [inline]
slab_alloc_node mm/slub.c:3850 [inline]
__do_kmalloc_node mm/slub.c:3980 [inline]
__kmalloc+0x2e0/0x490 mm/slub.c:3994
kmalloc include/linux/slab.h:594 [inline]
kzalloc include/linux/slab.h:711 [inline]
net_alloc_generic net/core/net_namespace.c:75 [inline]
net_assign_generic net/core/net_namespace.c:95 [inline]
ops_init+0x203/0x610 net/core/net_namespace.c:130
__register_pernet_operations net/core/net_namespace.c:1214 [inline]
register_pernet_operations+0x2cb/0x660 net/core/net_namespace.c:1283
register_pernet_device+0x33/0x80 net/core/net_namespace.c:1370
dp_init+0x95/0x160 net/openvswitch/datapath.c:2745
do_one_initcall+0x23a/0x830 init/main.c:1236
do_initcall_level+0x157/0x210 init/main.c:1298
do_initcalls+0x3f/0x80 init/main.c:1314
kernel_init_freeable+0x42f/0x5d0 init/main.c:1551
kernel_init+0x1d/0x2a0 init/main.c:1441
page_owner free stack trace missing
Memory state around the buggy address:
ffff88802b3d6f00: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
ffff88802b3d6f80: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
>ffff88802b3d7000: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
^
ffff88802b3d7080: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
ffff88802b3d7100: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
==================================================================
---
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 syzkaller@googlegroups.com.
syzbot will keep track of this issue. See:
https://goo.gl/tpsmEJ#status for how to communicate with syzbot.
If the report is already addressed, let syzbot know by replying with:
#syz fix: exact-commit-title
If you want to overwrite report's subsystems, reply with:
#syz set subsystems: new-subsystem
(See the list of subsystem names on the web dashboard)
If the report is a duplicate of another one, reply with:
#syz dup: exact-subject-of-another-report
If you want to undo deduplication, reply with:
#syz undup
^ permalink raw reply [flat|nested] 9+ messages in thread* Re: [syzbot] [bluetooth?] KASAN: slab-use-after-free Read in l2cap_send_cmd 2024-02-26 9:32 [syzbot] [bluetooth?] KASAN: slab-use-after-free Read in l2cap_send_cmd syzbot @ 2025-01-06 9:04 ` syzbot 2025-01-15 9:46 ` [PATCH] Bluetooth: hci_core: sync hci rx and cmd sync work Edward Adam Davis 2025-01-14 14:09 ` [syzbot] [bluetooth?] KASAN: slab-use-after-free Read in l2cap_send_cmd syzbot 1 sibling, 1 reply; 9+ messages in thread From: syzbot @ 2025-01-06 9:04 UTC (permalink / raw) To: johan.hedberg, linux-bluetooth, linux-kernel, luiz.dentz, marcel, syzkaller-bugs syzbot has found a reproducer for the following issue on: HEAD commit: ab75170520d4 Merge tag 'linux-watchdog-6.13-rc6' of git://.. git tree: upstream console+strace: https://syzkaller.appspot.com/x/log.txt?x=17f4330f980000 kernel config: https://syzkaller.appspot.com/x/.config?x=1c541fa8af5c9cc7 dashboard link: https://syzkaller.appspot.com/bug?extid=31c2f641b850a348a734 compiler: Debian clang version 15.0.6, GNU ld (GNU Binutils for Debian) 2.40 syz repro: https://syzkaller.appspot.com/x/repro.syz?x=11261edf980000 C reproducer: https://syzkaller.appspot.com/x/repro.c?x=17fa36f8580000 Downloadable assets: disk image: https://storage.googleapis.com/syzbot-assets/1740fef78c43/disk-ab751705.raw.xz vmlinux: https://storage.googleapis.com/syzbot-assets/a74d1ace549b/vmlinux-ab751705.xz kernel image: https://storage.googleapis.com/syzbot-assets/524d100d5187/bzImage-ab751705.xz IMPORTANT: if you fix the issue, please add the following tag to the commit: Reported-by: syzbot+31c2f641b850a348a734@syzkaller.appspotmail.com BUG: KASAN: slab-use-after-free in l2cap_build_cmd net/bluetooth/l2cap_core.c:2964 [inline] BUG: KASAN: slab-use-after-free in l2cap_send_cmd+0x187/0x8d0 net/bluetooth/l2cap_core.c:954 Read of size 8 at addr ffff8880271a4000 by task kworker/u9:2/5837 CPU: 0 UID: 0 PID: 5837 Comm: kworker/u9:2 Not tainted 6.13.0-rc5-syzkaller-00163-gab75170520d4 #0 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/13/2024 Workqueue: hci1 hci_rx_work Call Trace: <TASK> __dump_stack lib/dump_stack.c:94 [inline] dump_stack_lvl+0x241/0x360 lib/dump_stack.c:120 print_address_description mm/kasan/report.c:378 [inline] print_report+0x169/0x550 mm/kasan/report.c:489 kasan_report+0x143/0x180 mm/kasan/report.c:602 l2cap_build_cmd net/bluetooth/l2cap_core.c:2964 [inline] l2cap_send_cmd+0x187/0x8d0 net/bluetooth/l2cap_core.c:954 l2cap_sig_send_rej net/bluetooth/l2cap_core.c:5502 [inline] l2cap_sig_channel net/bluetooth/l2cap_core.c:5538 [inline] l2cap_recv_frame+0x221f/0x10db0 net/bluetooth/l2cap_core.c:6817 hci_acldata_packet net/bluetooth/hci_core.c:3797 [inline] hci_rx_work+0x508/0xdb0 net/bluetooth/hci_core.c:4040 process_one_work kernel/workqueue.c:3229 [inline] process_scheduled_works+0xa66/0x1840 kernel/workqueue.c:3310 worker_thread+0x870/0xd30 kernel/workqueue.c:3391 kthread+0x2f0/0x390 kernel/kthread.c:389 ret_from_fork+0x4b/0x80 arch/x86/kernel/process.c:147 ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244 </TASK> Allocated by task 5837: kasan_save_stack mm/kasan/common.c:47 [inline] kasan_save_track+0x3f/0x80 mm/kasan/common.c:68 poison_kmalloc_redzone mm/kasan/common.c:377 [inline] __kasan_kmalloc+0x98/0xb0 mm/kasan/common.c:394 kasan_kmalloc include/linux/kasan.h:260 [inline] __kmalloc_cache_noprof+0x243/0x390 mm/slub.c:4329 kmalloc_noprof include/linux/slab.h:901 [inline] kzalloc_noprof include/linux/slab.h:1037 [inline] l2cap_conn_add+0xa9/0x8e0 net/bluetooth/l2cap_core.c:6860 l2cap_connect_cfm+0x115/0x1090 net/bluetooth/l2cap_core.c:7239 hci_connect_cfm include/net/bluetooth/hci_core.h:2057 [inline] hci_remote_features_evt+0x68e/0xac0 net/bluetooth/hci_event.c:3726 hci_event_func net/bluetooth/hci_event.c:7473 [inline] hci_event_packet+0xac2/0x1540 net/bluetooth/hci_event.c:7525 hci_rx_work+0x3f3/0xdb0 net/bluetooth/hci_core.c:4035 process_one_work kernel/workqueue.c:3229 [inline] process_scheduled_works+0xa66/0x1840 kernel/workqueue.c:3310 worker_thread+0x870/0xd30 kernel/workqueue.c:3391 kthread+0x2f0/0x390 kernel/kthread.c:389 ret_from_fork+0x4b/0x80 arch/x86/kernel/process.c:147 ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244 Freed by task 54: kasan_save_stack mm/kasan/common.c:47 [inline] kasan_save_track+0x3f/0x80 mm/kasan/common.c:68 kasan_save_free_info+0x40/0x50 mm/kasan/generic.c:582 poison_slab_object mm/kasan/common.c:247 [inline] __kasan_slab_free+0x59/0x70 mm/kasan/common.c:264 kasan_slab_free include/linux/kasan.h:233 [inline] slab_free_hook mm/slub.c:2353 [inline] slab_free mm/slub.c:4613 [inline] kfree+0x196/0x430 mm/slub.c:4761 l2cap_connect_cfm+0xcc/0x1090 net/bluetooth/l2cap_core.c:7235 hci_connect_cfm include/net/bluetooth/hci_core.h:2057 [inline] hci_conn_failed+0x287/0x400 net/bluetooth/hci_conn.c:1266 hci_abort_conn_sync+0x56c/0x11f0 net/bluetooth/hci_sync.c:5603 hci_cmd_sync_work+0x22b/0x400 net/bluetooth/hci_sync.c:332 process_one_work kernel/workqueue.c:3229 [inline] process_scheduled_works+0xa66/0x1840 kernel/workqueue.c:3310 worker_thread+0x870/0xd30 kernel/workqueue.c:3391 kthread+0x2f0/0x390 kernel/kthread.c:389 ret_from_fork+0x4b/0x80 arch/x86/kernel/process.c:147 ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244 Last potentially related work creation: kasan_save_stack+0x3f/0x60 mm/kasan/common.c:47 __kasan_record_aux_stack+0xac/0xc0 mm/kasan/generic.c:544 insert_work+0x3e/0x330 kernel/workqueue.c:2183 __queue_work+0xc8b/0xf50 kernel/workqueue.c:2339 call_timer_fn+0x187/0x650 kernel/time/timer.c:1793 expire_timers kernel/time/timer.c:1839 [inline] __run_timers kernel/time/timer.c:2418 [inline] __run_timer_base+0x695/0x8e0 kernel/time/timer.c:2430 run_timer_base kernel/time/timer.c:2439 [inline] run_timer_softirq+0xb7/0x170 kernel/time/timer.c:2449 handle_softirqs+0x2d4/0x9b0 kernel/softirq.c:561 __do_softirq kernel/softirq.c:595 [inline] invoke_softirq kernel/softirq.c:435 [inline] __irq_exit_rcu+0xf7/0x220 kernel/softirq.c:662 irq_exit_rcu+0x9/0x30 kernel/softirq.c:678 instr_sysvec_apic_timer_interrupt arch/x86/kernel/apic/apic.c:1049 [inline] sysvec_apic_timer_interrupt+0xa6/0xc0 arch/x86/kernel/apic/apic.c:1049 asm_sysvec_apic_timer_interrupt+0x1a/0x20 arch/x86/include/asm/idtentry.h:702 Second to last potentially related work creation: kasan_save_stack+0x3f/0x60 mm/kasan/common.c:47 __kasan_record_aux_stack+0xac/0xc0 mm/kasan/generic.c:544 insert_work+0x3e/0x330 kernel/workqueue.c:2183 __queue_work+0xb66/0xf50 kernel/workqueue.c:2343 queue_work_on+0x1c2/0x380 kernel/workqueue.c:2390 queue_work include/linux/workqueue.h:662 [inline] l2cap_conn_ready net/bluetooth/l2cap_core.c:1640 [inline] l2cap_connect_cfm+0xdd5/0x1090 net/bluetooth/l2cap_core.c:7280 hci_connect_cfm include/net/bluetooth/hci_core.h:2057 [inline] hci_remote_features_evt+0x68e/0xac0 net/bluetooth/hci_event.c:3726 hci_event_func net/bluetooth/hci_event.c:7473 [inline] hci_event_packet+0xac2/0x1540 net/bluetooth/hci_event.c:7525 hci_rx_work+0x3f3/0xdb0 net/bluetooth/hci_core.c:4035 process_one_work kernel/workqueue.c:3229 [inline] process_scheduled_works+0xa66/0x1840 kernel/workqueue.c:3310 worker_thread+0x870/0xd30 kernel/workqueue.c:3391 kthread+0x2f0/0x390 kernel/kthread.c:389 ret_from_fork+0x4b/0x80 arch/x86/kernel/process.c:147 ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244 The buggy address belongs to the object at ffff8880271a4000 which belongs to the cache kmalloc-1k of size 1024 The buggy address is located 0 bytes inside of freed 1024-byte region [ffff8880271a4000, ffff8880271a4400) The buggy address belongs to the physical page: page: refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x271a0 head: order:3 mapcount:0 entire_mapcount:0 nr_pages_mapped:0 pincount:0 flags: 0xfff00000000040(head|node=0|zone=1|lastcpupid=0x7ff) page_type: f5(slab) raw: 00fff00000000040 ffff88801ac41dc0 ffffea0001c09800 dead000000000002 raw: 0000000000000000 0000000000100010 00000001f5000000 0000000000000000 head: 00fff00000000040 ffff88801ac41dc0 ffffea0001c09800 dead000000000002 head: 0000000000000000 0000000000100010 00000001f5000000 0000000000000000 head: 00fff00000000003 ffffea00009c6801 ffffffffffffffff 0000000000000000 head: 0000000000000008 0000000000000000 00000000ffffffff 0000000000000000 page dumped because: kasan: bad access detected page_owner tracks the page as allocated page last allocated via order 3, migratetype Unmovable, gfp_mask 0x252800(GFP_NOWAIT|__GFP_NORETRY|__GFP_COMP|__GFP_THISNODE), pid 12, tgid 12 (kworker/u8:1), ts 7179124429, free_ts 0 set_page_owner include/linux/page_owner.h:32 [inline] post_alloc_hook+0x1f3/0x230 mm/page_alloc.c:1558 prep_new_page mm/page_alloc.c:1566 [inline] get_page_from_freelist+0x365c/0x37a0 mm/page_alloc.c:3476 __alloc_pages_noprof+0x292/0x710 mm/page_alloc.c:4753 __alloc_pages_node_noprof include/linux/gfp.h:269 [inline] alloc_slab_page+0x59/0x110 mm/slub.c:2425 allocate_slab+0x5a/0x2b0 mm/slub.c:2589 new_slab mm/slub.c:2642 [inline] ___slab_alloc+0xc27/0x14a0 mm/slub.c:3830 __slab_alloc+0x58/0xa0 mm/slub.c:3920 __slab_alloc_node mm/slub.c:3995 [inline] slab_alloc_node mm/slub.c:4156 [inline] __kmalloc_cache_node_noprof+0x294/0x3a0 mm/slub.c:4337 kmalloc_node_noprof include/linux/slab.h:924 [inline] blk_mq_alloc_hctx block/blk-mq.c:3935 [inline] blk_mq_alloc_and_init_hctx+0x17f/0xd50 block/blk-mq.c:4443 blk_mq_realloc_hw_ctxs+0x19c/0xb00 block/blk-mq.c:4476 blk_mq_init_allocated_queue+0x3f6/0x14c0 block/blk-mq.c:4530 blk_mq_alloc_queue+0x1d3/0x2f0 block/blk-mq.c:4343 scsi_alloc_sdev+0x76c/0xb80 drivers/scsi/scsi_scan.c:337 scsi_probe_and_add_lun+0x1d4/0x4bd0 drivers/scsi/scsi_scan.c:1210 __scsi_scan_target+0x205/0x1080 drivers/scsi/scsi_scan.c:1757 scsi_scan_channel drivers/scsi/scsi_scan.c:1845 [inline] scsi_scan_host_selected+0x37e/0x690 drivers/scsi/scsi_scan.c:1874 page_owner free stack trace missing Memory state around the buggy address: ffff8880271a3f00: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc ffff8880271a3f80: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc >ffff8880271a4000: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb ^ ffff8880271a4080: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb ffff8880271a4100: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb ================================================================== --- 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. ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH] Bluetooth: hci_core: sync hci rx and cmd sync work 2025-01-06 9:04 ` syzbot @ 2025-01-15 9:46 ` Edward Adam Davis 2025-01-15 10:31 ` bluez.test.bot 2025-01-15 16:13 ` [PATCH] " Luiz Augusto von Dentz 0 siblings, 2 replies; 9+ messages in thread From: Edward Adam Davis @ 2025-01-15 9:46 UTC (permalink / raw) To: syzbot+31c2f641b850a348a734 Cc: johan.hedberg, linux-bluetooth, linux-kernel, luiz.dentz, marcel, syzkaller-bugs syzbot reported a slab-use-after-free Read in l2cap_send_cmd. [1] After the hci sync command releases l2cap_conn, the hci receive data work queue references the released l2cap_conn when sending to the upper layer. Add hci dev lock to the hci receive data work queue to synchronize the two. [1] BUG: KASAN: slab-use-after-free in l2cap_send_cmd+0x187/0x8d0 net/bluetooth/l2cap_core.c:954 Read of size 8 at addr ffff8880271a4000 by task kworker/u9:2/5837 CPU: 0 UID: 0 PID: 5837 Comm: kworker/u9:2 Not tainted 6.13.0-rc5-syzkaller-00163-gab75170520d4 #0 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/13/2024 Workqueue: hci1 hci_rx_work Call Trace: <TASK> __dump_stack lib/dump_stack.c:94 [inline] dump_stack_lvl+0x241/0x360 lib/dump_stack.c:120 print_address_description mm/kasan/report.c:378 [inline] print_report+0x169/0x550 mm/kasan/report.c:489 kasan_report+0x143/0x180 mm/kasan/report.c:602 l2cap_build_cmd net/bluetooth/l2cap_core.c:2964 [inline] l2cap_send_cmd+0x187/0x8d0 net/bluetooth/l2cap_core.c:954 l2cap_sig_send_rej net/bluetooth/l2cap_core.c:5502 [inline] l2cap_sig_channel net/bluetooth/l2cap_core.c:5538 [inline] l2cap_recv_frame+0x221f/0x10db0 net/bluetooth/l2cap_core.c:6817 hci_acldata_packet net/bluetooth/hci_core.c:3797 [inline] hci_rx_work+0x508/0xdb0 net/bluetooth/hci_core.c:4040 process_one_work kernel/workqueue.c:3229 [inline] process_scheduled_works+0xa66/0x1840 kernel/workqueue.c:3310 worker_thread+0x870/0xd30 kernel/workqueue.c:3391 kthread+0x2f0/0x390 kernel/kthread.c:389 ret_from_fork+0x4b/0x80 arch/x86/kernel/process.c:147 ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244 </TASK> Allocated by task 5837: kasan_save_stack mm/kasan/common.c:47 [inline] kasan_save_track+0x3f/0x80 mm/kasan/common.c:68 poison_kmalloc_redzone mm/kasan/common.c:377 [inline] __kasan_kmalloc+0x98/0xb0 mm/kasan/common.c:394 kasan_kmalloc include/linux/kasan.h:260 [inline] __kmalloc_cache_noprof+0x243/0x390 mm/slub.c:4329 kmalloc_noprof include/linux/slab.h:901 [inline] kzalloc_noprof include/linux/slab.h:1037 [inline] l2cap_conn_add+0xa9/0x8e0 net/bluetooth/l2cap_core.c:6860 l2cap_connect_cfm+0x115/0x1090 net/bluetooth/l2cap_core.c:7239 hci_connect_cfm include/net/bluetooth/hci_core.h:2057 [inline] hci_remote_features_evt+0x68e/0xac0 net/bluetooth/hci_event.c:3726 hci_event_func net/bluetooth/hci_event.c:7473 [inline] hci_event_packet+0xac2/0x1540 net/bluetooth/hci_event.c:7525 hci_rx_work+0x3f3/0xdb0 net/bluetooth/hci_core.c:4035 process_one_work kernel/workqueue.c:3229 [inline] process_scheduled_works+0xa66/0x1840 kernel/workqueue.c:3310 worker_thread+0x870/0xd30 kernel/workqueue.c:3391 kthread+0x2f0/0x390 kernel/kthread.c:389 ret_from_fork+0x4b/0x80 arch/x86/kernel/process.c:147 ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244 Freed by task 54: kasan_save_stack mm/kasan/common.c:47 [inline] kasan_save_track+0x3f/0x80 mm/kasan/common.c:68 kasan_save_free_info+0x40/0x50 mm/kasan/generic.c:582 poison_slab_object mm/kasan/common.c:247 [inline] __kasan_slab_free+0x59/0x70 mm/kasan/common.c:264 kasan_slab_free include/linux/kasan.h:233 [inline] slab_free_hook mm/slub.c:2353 [inline] slab_free mm/slub.c:4613 [inline] kfree+0x196/0x430 mm/slub.c:4761 l2cap_connect_cfm+0xcc/0x1090 net/bluetooth/l2cap_core.c:7235 hci_connect_cfm include/net/bluetooth/hci_core.h:2057 [inline] hci_conn_failed+0x287/0x400 net/bluetooth/hci_conn.c:1266 hci_abort_conn_sync+0x56c/0x11f0 net/bluetooth/hci_sync.c:5603 hci_cmd_sync_work+0x22b/0x400 net/bluetooth/hci_sync.c:332 process_one_work kernel/workqueue.c:3229 [inline] process_scheduled_works+0xa66/0x1840 kernel/workqueue.c:3310 worker_thread+0x870/0xd30 kernel/workqueue.c:3391 kthread+0x2f0/0x390 kernel/kthread.c:389 ret_from_fork+0x4b/0x80 arch/x86/kernel/process.c:147 ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244 Reported-by: syzbot+31c2f641b850a348a734@syzkaller.appspotmail.com Closes: https://syzkaller.appspot.com/bug?extid=31c2f641b850a348a734 Tested-by: syzbot+31c2f641b850a348a734@syzkaller.appspotmail.com Signed-off-by: Edward Adam Davis <eadavis@qq.com> --- net/bluetooth/hci_core.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c index f9e19f9cb5a3..88c8aa37eb64 100644 --- a/net/bluetooth/hci_core.c +++ b/net/bluetooth/hci_core.c @@ -3798,7 +3798,9 @@ static void hci_acldata_packet(struct hci_dev *hdev, struct sk_buff *skb) hci_conn_enter_active_mode(conn, BT_POWER_FORCE_ACTIVE_OFF); /* Send to upper protocol */ + hci_dev_lock(hdev); l2cap_recv_acldata(conn, skb, flags); + hci_dev_unlock(hdev); return; } else { bt_dev_err(hdev, "ACL packet for unknown connection handle %d", -- 2.47.0 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* RE: Bluetooth: hci_core: sync hci rx and cmd sync work 2025-01-15 9:46 ` [PATCH] Bluetooth: hci_core: sync hci rx and cmd sync work Edward Adam Davis @ 2025-01-15 10:31 ` bluez.test.bot 2025-01-15 16:13 ` [PATCH] " Luiz Augusto von Dentz 1 sibling, 0 replies; 9+ messages in thread From: bluez.test.bot @ 2025-01-15 10:31 UTC (permalink / raw) To: linux-bluetooth, eadavis [-- Attachment #1: Type: text/plain, Size: 2241 bytes --] This is automated email and please do not reply to this email! Dear submitter, Thank you for submitting the patches to the linux bluetooth mailing list. This is a CI test results with your patch series: PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=925634 ---Test result--- Test Summary: CheckPatch PENDING 0.22 seconds GitLint PENDING 0.21 seconds SubjectPrefix PASS 0.14 seconds BuildKernel PASS 24.57 seconds CheckAllWarning PASS 26.44 seconds CheckSparse WARNING 30.11 seconds BuildKernel32 PASS 23.78 seconds TestRunnerSetup PASS 425.01 seconds TestRunner_l2cap-tester PASS 20.86 seconds TestRunner_iso-tester PASS 28.18 seconds TestRunner_bnep-tester PASS 4.90 seconds TestRunner_mgmt-tester FAIL 126.13 seconds TestRunner_rfcomm-tester PASS 7.79 seconds TestRunner_sco-tester PASS 12.41 seconds TestRunner_ioctl-tester PASS 9.03 seconds TestRunner_mesh-tester PASS 6.18 seconds TestRunner_smp-tester PASS 9.08 seconds TestRunner_userchan-tester PASS 5.28 seconds IncrementalBuild PENDING 0.42 seconds Details ############################## Test: CheckPatch - PENDING Desc: Run checkpatch.pl script Output: ############################## Test: GitLint - PENDING Desc: Run gitlint Output: ############################## Test: CheckSparse - WARNING Desc: Run sparse tool with linux kernel Output: net/bluetooth/hci_core.c:60:1: warning: symbol 'hci_cb_list_lock' was not declared. Should it be static? ############################## Test: TestRunner_mgmt-tester - FAIL Desc: Run mgmt-tester with test-runner Output: Total: 490, Passed: 484 (98.8%), Failed: 2, Not Run: 4 Failed Test Cases LL Privacy - Add Device 2 (2 Devices to AL) Failed 0.162 seconds LL Privacy - Add Device 3 (AL is full) Failed 0.198 seconds ############################## Test: IncrementalBuild - PENDING Desc: Incremental build with the patches in the series Output: --- Regards, Linux Bluetooth ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] Bluetooth: hci_core: sync hci rx and cmd sync work 2025-01-15 9:46 ` [PATCH] Bluetooth: hci_core: sync hci rx and cmd sync work Edward Adam Davis 2025-01-15 10:31 ` bluez.test.bot @ 2025-01-15 16:13 ` Luiz Augusto von Dentz 2025-01-16 10:42 ` Hillf Danton 1 sibling, 1 reply; 9+ messages in thread From: Luiz Augusto von Dentz @ 2025-01-15 16:13 UTC (permalink / raw) To: Edward Adam Davis Cc: syzbot+31c2f641b850a348a734, johan.hedberg, linux-bluetooth, linux-kernel, marcel, syzkaller-bugs Hi Edward, On Wed, Jan 15, 2025 at 4:46 AM Edward Adam Davis <eadavis@qq.com> wrote: > > syzbot reported a slab-use-after-free Read in l2cap_send_cmd. [1] > > After the hci sync command releases l2cap_conn, the hci receive data work > queue references the released l2cap_conn when sending to the upper layer. > Add hci dev lock to the hci receive data work queue to synchronize the two. > > [1] > BUG: KASAN: slab-use-after-free in l2cap_send_cmd+0x187/0x8d0 net/bluetooth/l2cap_core.c:954 > Read of size 8 at addr ffff8880271a4000 by task kworker/u9:2/5837 > > CPU: 0 UID: 0 PID: 5837 Comm: kworker/u9:2 Not tainted 6.13.0-rc5-syzkaller-00163-gab75170520d4 #0 > Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/13/2024 > Workqueue: hci1 hci_rx_work > Call Trace: > <TASK> > __dump_stack lib/dump_stack.c:94 [inline] > dump_stack_lvl+0x241/0x360 lib/dump_stack.c:120 > print_address_description mm/kasan/report.c:378 [inline] > print_report+0x169/0x550 mm/kasan/report.c:489 > kasan_report+0x143/0x180 mm/kasan/report.c:602 > l2cap_build_cmd net/bluetooth/l2cap_core.c:2964 [inline] > l2cap_send_cmd+0x187/0x8d0 net/bluetooth/l2cap_core.c:954 > l2cap_sig_send_rej net/bluetooth/l2cap_core.c:5502 [inline] > l2cap_sig_channel net/bluetooth/l2cap_core.c:5538 [inline] > l2cap_recv_frame+0x221f/0x10db0 net/bluetooth/l2cap_core.c:6817 > hci_acldata_packet net/bluetooth/hci_core.c:3797 [inline] > hci_rx_work+0x508/0xdb0 net/bluetooth/hci_core.c:4040 > process_one_work kernel/workqueue.c:3229 [inline] > process_scheduled_works+0xa66/0x1840 kernel/workqueue.c:3310 > worker_thread+0x870/0xd30 kernel/workqueue.c:3391 > kthread+0x2f0/0x390 kernel/kthread.c:389 > ret_from_fork+0x4b/0x80 arch/x86/kernel/process.c:147 > ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244 > </TASK> > > Allocated by task 5837: > kasan_save_stack mm/kasan/common.c:47 [inline] > kasan_save_track+0x3f/0x80 mm/kasan/common.c:68 > poison_kmalloc_redzone mm/kasan/common.c:377 [inline] > __kasan_kmalloc+0x98/0xb0 mm/kasan/common.c:394 > kasan_kmalloc include/linux/kasan.h:260 [inline] > __kmalloc_cache_noprof+0x243/0x390 mm/slub.c:4329 > kmalloc_noprof include/linux/slab.h:901 [inline] > kzalloc_noprof include/linux/slab.h:1037 [inline] > l2cap_conn_add+0xa9/0x8e0 net/bluetooth/l2cap_core.c:6860 > l2cap_connect_cfm+0x115/0x1090 net/bluetooth/l2cap_core.c:7239 > hci_connect_cfm include/net/bluetooth/hci_core.h:2057 [inline] > hci_remote_features_evt+0x68e/0xac0 net/bluetooth/hci_event.c:3726 > hci_event_func net/bluetooth/hci_event.c:7473 [inline] > hci_event_packet+0xac2/0x1540 net/bluetooth/hci_event.c:7525 > hci_rx_work+0x3f3/0xdb0 net/bluetooth/hci_core.c:4035 > process_one_work kernel/workqueue.c:3229 [inline] > process_scheduled_works+0xa66/0x1840 kernel/workqueue.c:3310 > worker_thread+0x870/0xd30 kernel/workqueue.c:3391 > kthread+0x2f0/0x390 kernel/kthread.c:389 > ret_from_fork+0x4b/0x80 arch/x86/kernel/process.c:147 > ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244 > > Freed by task 54: > kasan_save_stack mm/kasan/common.c:47 [inline] > kasan_save_track+0x3f/0x80 mm/kasan/common.c:68 > kasan_save_free_info+0x40/0x50 mm/kasan/generic.c:582 > poison_slab_object mm/kasan/common.c:247 [inline] > __kasan_slab_free+0x59/0x70 mm/kasan/common.c:264 > kasan_slab_free include/linux/kasan.h:233 [inline] > slab_free_hook mm/slub.c:2353 [inline] > slab_free mm/slub.c:4613 [inline] > kfree+0x196/0x430 mm/slub.c:4761 > l2cap_connect_cfm+0xcc/0x1090 net/bluetooth/l2cap_core.c:7235 > hci_connect_cfm include/net/bluetooth/hci_core.h:2057 [inline] > hci_conn_failed+0x287/0x400 net/bluetooth/hci_conn.c:1266 > hci_abort_conn_sync+0x56c/0x11f0 net/bluetooth/hci_sync.c:5603 > hci_cmd_sync_work+0x22b/0x400 net/bluetooth/hci_sync.c:332 > process_one_work kernel/workqueue.c:3229 [inline] > process_scheduled_works+0xa66/0x1840 kernel/workqueue.c:3310 > worker_thread+0x870/0xd30 kernel/workqueue.c:3391 > kthread+0x2f0/0x390 kernel/kthread.c:389 > ret_from_fork+0x4b/0x80 arch/x86/kernel/process.c:147 > ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244 > > Reported-by: syzbot+31c2f641b850a348a734@syzkaller.appspotmail.com > Closes: https://syzkaller.appspot.com/bug?extid=31c2f641b850a348a734 > Tested-by: syzbot+31c2f641b850a348a734@syzkaller.appspotmail.com > Signed-off-by: Edward Adam Davis <eadavis@qq.com> > --- > net/bluetooth/hci_core.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c > index f9e19f9cb5a3..88c8aa37eb64 100644 > --- a/net/bluetooth/hci_core.c > +++ b/net/bluetooth/hci_core.c > @@ -3798,7 +3798,9 @@ static void hci_acldata_packet(struct hci_dev *hdev, struct sk_buff *skb) > hci_conn_enter_active_mode(conn, BT_POWER_FORCE_ACTIVE_OFF); > > /* Send to upper protocol */ > + hci_dev_lock(hdev); > l2cap_recv_acldata(conn, skb, flags); > + hci_dev_unlock(hdev); This will not gonna fly, there have been instances where l2cap code needs to lock hdev so this most likely causes a deadlock, besides we used to have such design of locking hdev for everything but that doesn't scale very well. Instead, perhaps we can do something like the following: diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c index 27b4c4a2ba1f..023e3ebe0e39 100644 --- a/net/bluetooth/l2cap_core.c +++ b/net/bluetooth/l2cap_core.c @@ -7466,6 +7466,16 @@ static void l2cap_recv_reset(struct l2cap_conn *conn) conn->rx_len = 0; } +static struct l2cap_conn *l2cap_conn_hold_unless_zero(struct l2cap_conn *c) +{ + BT_DBG("conn %p orig refcnt %u", c, kref_read(&c->ref)); + + if (!kref_get_unless_zero(&c->ref)) + return NULL; + + return c; +} + void l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags) { struct l2cap_conn *conn = hcon->l2cap_data; @@ -7474,6 +7484,7 @@ void l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags) if (!conn) conn = l2cap_conn_add(hcon); + conn = l2cap_conn_hold_unless_zero(conn); if (!conn) goto drop; @@ -7565,6 +7576,8 @@ void l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags) break; } + l2cap_conn_put(conn); + drop: kfree_skb(skb); } > return; > } else { > bt_dev_err(hdev, "ACL packet for unknown connection handle %d", > -- > 2.47.0 > -- Luiz Augusto von Dentz ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH] Bluetooth: hci_core: sync hci rx and cmd sync work 2025-01-15 16:13 ` [PATCH] " Luiz Augusto von Dentz @ 2025-01-16 10:42 ` Hillf Danton 2025-01-16 15:31 ` Luiz Augusto von Dentz 0 siblings, 1 reply; 9+ messages in thread From: Hillf Danton @ 2025-01-16 10:42 UTC (permalink / raw) To: Luiz Augusto von Dentz Cc: Edward Adam Davis, syzbot+31c2f641b850a348a734, johan.hedberg, linux-bluetooth, linux-kernel, marcel, syzkaller-bugs On Wed, 15 Jan 2025 11:13:00 -0500 Luiz Augusto von Dentz <luiz.dentz@gmail.com> > On Wed, Jan 15, 2025 at 4:46 AM Edward Adam Davis <eadavis@qq.com> wrote: > > > > syzbot reported a slab-use-after-free Read in l2cap_send_cmd. [1] > > > > After the hci sync command releases l2cap_conn, the hci receive data work > > queue references the released l2cap_conn when sending to the upper layer. > > Add hci dev lock to the hci receive data work queue to synchronize the two. > > > > [1] > > BUG: KASAN: slab-use-after-free in l2cap_send_cmd+0x187/0x8d0 net/bluetooth/l2cap_core.c:954 > > Read of size 8 at addr ffff8880271a4000 by task kworker/u9:2/5837 > > > > CPU: 0 UID: 0 PID: 5837 Comm: kworker/u9:2 Not tainted 6.13.0-rc5-syzkaller-00163-gab75170520d4 #0 > > Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/13/2024 > > Workqueue: hci1 hci_rx_work > > Call Trace: > > <TASK> > > __dump_stack lib/dump_stack.c:94 [inline] > > dump_stack_lvl+0x241/0x360 lib/dump_stack.c:120 > > print_address_description mm/kasan/report.c:378 [inline] > > print_report+0x169/0x550 mm/kasan/report.c:489 > > kasan_report+0x143/0x180 mm/kasan/report.c:602 > > l2cap_build_cmd net/bluetooth/l2cap_core.c:2964 [inline] > > l2cap_send_cmd+0x187/0x8d0 net/bluetooth/l2cap_core.c:954 > > l2cap_sig_send_rej net/bluetooth/l2cap_core.c:5502 [inline] > > l2cap_sig_channel net/bluetooth/l2cap_core.c:5538 [inline] > > l2cap_recv_frame+0x221f/0x10db0 net/bluetooth/l2cap_core.c:6817 > > hci_acldata_packet net/bluetooth/hci_core.c:3797 [inline] > > hci_rx_work+0x508/0xdb0 net/bluetooth/hci_core.c:4040 > > process_one_work kernel/workqueue.c:3229 [inline] > > process_scheduled_works+0xa66/0x1840 kernel/workqueue.c:3310 > > worker_thread+0x870/0xd30 kernel/workqueue.c:3391 > > kthread+0x2f0/0x390 kernel/kthread.c:389 > > ret_from_fork+0x4b/0x80 arch/x86/kernel/process.c:147 > > ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244 > > </TASK> > > > > Allocated by task 5837: > > kasan_save_stack mm/kasan/common.c:47 [inline] > > kasan_save_track+0x3f/0x80 mm/kasan/common.c:68 > > poison_kmalloc_redzone mm/kasan/common.c:377 [inline] > > __kasan_kmalloc+0x98/0xb0 mm/kasan/common.c:394 > > kasan_kmalloc include/linux/kasan.h:260 [inline] > > __kmalloc_cache_noprof+0x243/0x390 mm/slub.c:4329 > > kmalloc_noprof include/linux/slab.h:901 [inline] > > kzalloc_noprof include/linux/slab.h:1037 [inline] > > l2cap_conn_add+0xa9/0x8e0 net/bluetooth/l2cap_core.c:6860 > > l2cap_connect_cfm+0x115/0x1090 net/bluetooth/l2cap_core.c:7239 > > hci_connect_cfm include/net/bluetooth/hci_core.h:2057 [inline] > > hci_remote_features_evt+0x68e/0xac0 net/bluetooth/hci_event.c:3726 > > hci_event_func net/bluetooth/hci_event.c:7473 [inline] > > hci_event_packet+0xac2/0x1540 net/bluetooth/hci_event.c:7525 > > hci_rx_work+0x3f3/0xdb0 net/bluetooth/hci_core.c:4035 > > process_one_work kernel/workqueue.c:3229 [inline] > > process_scheduled_works+0xa66/0x1840 kernel/workqueue.c:3310 > > worker_thread+0x870/0xd30 kernel/workqueue.c:3391 > > kthread+0x2f0/0x390 kernel/kthread.c:389 > > ret_from_fork+0x4b/0x80 arch/x86/kernel/process.c:147 > > ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244 > > > > Freed by task 54: > > kasan_save_stack mm/kasan/common.c:47 [inline] > > kasan_save_track+0x3f/0x80 mm/kasan/common.c:68 > > kasan_save_free_info+0x40/0x50 mm/kasan/generic.c:582 > > poison_slab_object mm/kasan/common.c:247 [inline] > > __kasan_slab_free+0x59/0x70 mm/kasan/common.c:264 > > kasan_slab_free include/linux/kasan.h:233 [inline] > > slab_free_hook mm/slub.c:2353 [inline] > > slab_free mm/slub.c:4613 [inline] > > kfree+0x196/0x430 mm/slub.c:4761 > > l2cap_connect_cfm+0xcc/0x1090 net/bluetooth/l2cap_core.c:7235 > > hci_connect_cfm include/net/bluetooth/hci_core.h:2057 [inline] > > hci_conn_failed+0x287/0x400 net/bluetooth/hci_conn.c:1266 > > hci_abort_conn_sync+0x56c/0x11f0 net/bluetooth/hci_sync.c:5603 > > hci_cmd_sync_work+0x22b/0x400 net/bluetooth/hci_sync.c:332 > > process_one_work kernel/workqueue.c:3229 [inline] > > process_scheduled_works+0xa66/0x1840 kernel/workqueue.c:3310 > > worker_thread+0x870/0xd30 kernel/workqueue.c:3391 > > kthread+0x2f0/0x390 kernel/kthread.c:389 > > ret_from_fork+0x4b/0x80 arch/x86/kernel/process.c:147 > > ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244 > > > > Reported-by: syzbot+31c2f641b850a348a734@syzkaller.appspotmail.com > > Closes: https://syzkaller.appspot.com/bug?extid=31c2f641b850a348a734 > > Tested-by: syzbot+31c2f641b850a348a734@syzkaller.appspotmail.com > > Signed-off-by: Edward Adam Davis <eadavis@qq.com> > > --- > > net/bluetooth/hci_core.c | 2 ++ > > 1 file changed, 2 insertions(+) > > > > diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c > > index f9e19f9cb5a3..88c8aa37eb64 100644 > > --- a/net/bluetooth/hci_core.c > > +++ b/net/bluetooth/hci_core.c > > @@ -3798,7 +3798,9 @@ static void hci_acldata_packet(struct hci_dev *hdev, struct sk_buff *skb) > > hci_conn_enter_active_mode(conn, BT_POWER_FORCE_ACTIVE_OFF); > > > > /* Send to upper protocol */ > > + hci_dev_lock(hdev); > > l2cap_recv_acldata(conn, skb, flags); > > + hci_dev_unlock(hdev); > > This will not gonna fly, there have been instances where l2cap code > needs to lock hdev so this most likely causes a deadlock, besides we > used to have such design of locking hdev for everything but that > doesn't scale very well. > > Instead, perhaps we can do something like the following: > > diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c > index 27b4c4a2ba1f..023e3ebe0e39 100644 > --- a/net/bluetooth/l2cap_core.c > +++ b/net/bluetooth/l2cap_core.c > @@ -7466,6 +7466,16 @@ static void l2cap_recv_reset(struct l2cap_conn *conn) > conn->rx_len = 0; > } > > +static struct l2cap_conn *l2cap_conn_hold_unless_zero(struct l2cap_conn *c) > +{ > + BT_DBG("conn %p orig refcnt %u", c, kref_read(&c->ref)); > + > + if (!kref_get_unless_zero(&c->ref)) > + return NULL; > + > + return c; > +} > + > void l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags) > { > struct l2cap_conn *conn = hcon->l2cap_data; > @@ -7474,6 +7484,7 @@ void l2cap_recv_acldata(struct hci_conn *hcon, > struct sk_buff *skb, u16 flags) > if (!conn) > conn = l2cap_conn_add(hcon); > > + conn = l2cap_conn_hold_unless_zero(conn); This does not work because conn can be freed before bumping refcnt up, and bumpup alone does not help l2cap_send_cmd() in case conn->hchan has been cleared in l2cap_conn_del(). > if (!conn) > goto drop; > > @@ -7565,6 +7576,8 @@ void l2cap_recv_acldata(struct hci_conn *hcon, > struct sk_buff *skb, u16 flags) > break; > } > > + l2cap_conn_put(conn); > + > drop: > kfree_skb(skb); > } > > > return; > > } else { > > bt_dev_err(hdev, "ACL packet for unknown connection handle %d", > > -- > > 2.47.0 ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] Bluetooth: hci_core: sync hci rx and cmd sync work 2025-01-16 10:42 ` Hillf Danton @ 2025-01-16 15:31 ` Luiz Augusto von Dentz 2025-01-16 22:44 ` Hillf Danton 0 siblings, 1 reply; 9+ messages in thread From: Luiz Augusto von Dentz @ 2025-01-16 15:31 UTC (permalink / raw) To: Hillf Danton Cc: Edward Adam Davis, syzbot+31c2f641b850a348a734, johan.hedberg, linux-bluetooth, linux-kernel, marcel, syzkaller-bugs Hi Hillf, On Thu, Jan 16, 2025 at 5:42 AM Hillf Danton <hdanton@sina.com> wrote: > > On Wed, 15 Jan 2025 11:13:00 -0500 Luiz Augusto von Dentz <luiz.dentz@gmail.com> > > On Wed, Jan 15, 2025 at 4:46 AM Edward Adam Davis <eadavis@qq.com> wrote: > > > > > > syzbot reported a slab-use-after-free Read in l2cap_send_cmd. [1] > > > > > > After the hci sync command releases l2cap_conn, the hci receive data work > > > queue references the released l2cap_conn when sending to the upper layer. > > > Add hci dev lock to the hci receive data work queue to synchronize the two. > > > > > > [1] > > > BUG: KASAN: slab-use-after-free in l2cap_send_cmd+0x187/0x8d0 net/bluetooth/l2cap_core.c:954 > > > Read of size 8 at addr ffff8880271a4000 by task kworker/u9:2/5837 > > > > > > CPU: 0 UID: 0 PID: 5837 Comm: kworker/u9:2 Not tainted 6.13.0-rc5-syzkaller-00163-gab75170520d4 #0 > > > Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/13/2024 > > > Workqueue: hci1 hci_rx_work > > > Call Trace: > > > <TASK> > > > __dump_stack lib/dump_stack.c:94 [inline] > > > dump_stack_lvl+0x241/0x360 lib/dump_stack.c:120 > > > print_address_description mm/kasan/report.c:378 [inline] > > > print_report+0x169/0x550 mm/kasan/report.c:489 > > > kasan_report+0x143/0x180 mm/kasan/report.c:602 > > > l2cap_build_cmd net/bluetooth/l2cap_core.c:2964 [inline] > > > l2cap_send_cmd+0x187/0x8d0 net/bluetooth/l2cap_core.c:954 > > > l2cap_sig_send_rej net/bluetooth/l2cap_core.c:5502 [inline] > > > l2cap_sig_channel net/bluetooth/l2cap_core.c:5538 [inline] > > > l2cap_recv_frame+0x221f/0x10db0 net/bluetooth/l2cap_core.c:6817 > > > hci_acldata_packet net/bluetooth/hci_core.c:3797 [inline] > > > hci_rx_work+0x508/0xdb0 net/bluetooth/hci_core.c:4040 > > > process_one_work kernel/workqueue.c:3229 [inline] > > > process_scheduled_works+0xa66/0x1840 kernel/workqueue.c:3310 > > > worker_thread+0x870/0xd30 kernel/workqueue.c:3391 > > > kthread+0x2f0/0x390 kernel/kthread.c:389 > > > ret_from_fork+0x4b/0x80 arch/x86/kernel/process.c:147 > > > ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244 > > > </TASK> > > > > > > Allocated by task 5837: > > > kasan_save_stack mm/kasan/common.c:47 [inline] > > > kasan_save_track+0x3f/0x80 mm/kasan/common.c:68 > > > poison_kmalloc_redzone mm/kasan/common.c:377 [inline] > > > __kasan_kmalloc+0x98/0xb0 mm/kasan/common.c:394 > > > kasan_kmalloc include/linux/kasan.h:260 [inline] > > > __kmalloc_cache_noprof+0x243/0x390 mm/slub.c:4329 > > > kmalloc_noprof include/linux/slab.h:901 [inline] > > > kzalloc_noprof include/linux/slab.h:1037 [inline] > > > l2cap_conn_add+0xa9/0x8e0 net/bluetooth/l2cap_core.c:6860 > > > l2cap_connect_cfm+0x115/0x1090 net/bluetooth/l2cap_core.c:7239 > > > hci_connect_cfm include/net/bluetooth/hci_core.h:2057 [inline] > > > hci_remote_features_evt+0x68e/0xac0 net/bluetooth/hci_event.c:3726 > > > hci_event_func net/bluetooth/hci_event.c:7473 [inline] > > > hci_event_packet+0xac2/0x1540 net/bluetooth/hci_event.c:7525 > > > hci_rx_work+0x3f3/0xdb0 net/bluetooth/hci_core.c:4035 > > > process_one_work kernel/workqueue.c:3229 [inline] > > > process_scheduled_works+0xa66/0x1840 kernel/workqueue.c:3310 > > > worker_thread+0x870/0xd30 kernel/workqueue.c:3391 > > > kthread+0x2f0/0x390 kernel/kthread.c:389 > > > ret_from_fork+0x4b/0x80 arch/x86/kernel/process.c:147 > > > ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244 > > > > > > Freed by task 54: > > > kasan_save_stack mm/kasan/common.c:47 [inline] > > > kasan_save_track+0x3f/0x80 mm/kasan/common.c:68 > > > kasan_save_free_info+0x40/0x50 mm/kasan/generic.c:582 > > > poison_slab_object mm/kasan/common.c:247 [inline] > > > __kasan_slab_free+0x59/0x70 mm/kasan/common.c:264 > > > kasan_slab_free include/linux/kasan.h:233 [inline] > > > slab_free_hook mm/slub.c:2353 [inline] > > > slab_free mm/slub.c:4613 [inline] > > > kfree+0x196/0x430 mm/slub.c:4761 > > > l2cap_connect_cfm+0xcc/0x1090 net/bluetooth/l2cap_core.c:7235 > > > hci_connect_cfm include/net/bluetooth/hci_core.h:2057 [inline] > > > hci_conn_failed+0x287/0x400 net/bluetooth/hci_conn.c:1266 > > > hci_abort_conn_sync+0x56c/0x11f0 net/bluetooth/hci_sync.c:5603 > > > hci_cmd_sync_work+0x22b/0x400 net/bluetooth/hci_sync.c:332 > > > process_one_work kernel/workqueue.c:3229 [inline] > > > process_scheduled_works+0xa66/0x1840 kernel/workqueue.c:3310 > > > worker_thread+0x870/0xd30 kernel/workqueue.c:3391 > > > kthread+0x2f0/0x390 kernel/kthread.c:389 > > > ret_from_fork+0x4b/0x80 arch/x86/kernel/process.c:147 > > > ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244 > > > > > > Reported-by: syzbot+31c2f641b850a348a734@syzkaller.appspotmail.com > > > Closes: https://syzkaller.appspot.com/bug?extid=31c2f641b850a348a734 > > > Tested-by: syzbot+31c2f641b850a348a734@syzkaller.appspotmail.com > > > Signed-off-by: Edward Adam Davis <eadavis@qq.com> > > > --- > > > net/bluetooth/hci_core.c | 2 ++ > > > 1 file changed, 2 insertions(+) > > > > > > diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c > > > index f9e19f9cb5a3..88c8aa37eb64 100644 > > > --- a/net/bluetooth/hci_core.c > > > +++ b/net/bluetooth/hci_core.c > > > @@ -3798,7 +3798,9 @@ static void hci_acldata_packet(struct hci_dev *hdev, struct sk_buff *skb) > > > hci_conn_enter_active_mode(conn, BT_POWER_FORCE_ACTIVE_OFF); > > > > > > /* Send to upper protocol */ > > > + hci_dev_lock(hdev); > > > l2cap_recv_acldata(conn, skb, flags); > > > + hci_dev_unlock(hdev); > > > > This will not gonna fly, there have been instances where l2cap code > > needs to lock hdev so this most likely causes a deadlock, besides we > > used to have such design of locking hdev for everything but that > > doesn't scale very well. > > > > Instead, perhaps we can do something like the following: > > > > diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c > > index 27b4c4a2ba1f..023e3ebe0e39 100644 > > --- a/net/bluetooth/l2cap_core.c > > +++ b/net/bluetooth/l2cap_core.c > > @@ -7466,6 +7466,16 @@ static void l2cap_recv_reset(struct l2cap_conn *conn) > > conn->rx_len = 0; > > } > > > > +static struct l2cap_conn *l2cap_conn_hold_unless_zero(struct l2cap_conn *c) > > +{ > > + BT_DBG("conn %p orig refcnt %u", c, kref_read(&c->ref)); > > + > > + if (!kref_get_unless_zero(&c->ref)) > > + return NULL; > > + > > + return c; > > +} > > + > > void l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags) > > { > > struct l2cap_conn *conn = hcon->l2cap_data; > > @@ -7474,6 +7484,7 @@ void l2cap_recv_acldata(struct hci_conn *hcon, > > struct sk_buff *skb, u16 flags) > > if (!conn) > > conn = l2cap_conn_add(hcon); > > > > + conn = l2cap_conn_hold_unless_zero(conn); > > This does not work because conn can be freed before bumping refcnt up, > and bumpup alone does not help l2cap_send_cmd() in case conn->hchan has been > cleared in l2cap_conn_del(). Well then perhaps we can use hdev lock just to protect l2cap_data: diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c index 27b4c4a2ba1f..00ef61609d49 100644 --- a/net/bluetooth/l2cap_core.c +++ b/net/bluetooth/l2cap_core.c @@ -7466,14 +7466,33 @@ static void l2cap_recv_reset(struct l2cap_conn *conn) conn->rx_len = 0; } +static struct l2cap_conn *l2cap_conn_hold_unless_zero(struct l2cap_conn *c) +{ + BT_DBG("conn %p orig refcnt %u", c, kref_read(&c->ref)); + + if (!kref_get_unless_zero(&c->ref)) + return NULL; + + return c; +} + void l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags) { - struct l2cap_conn *conn = hcon->l2cap_data; + struct l2cap_conn *conn; int len; + /* Lock hdev to access l2cap_data to avoid race with l2cap_conn_del */ + hci_dev_lock(hcon->hdev); + + conn = hcon->l2cap_data; + if (!conn) conn = l2cap_conn_add(hcon); + conn = l2cap_conn_hold_unless_zero(conn); + + hci_dev_unlock(hcon->hdev); + if (!conn) goto drop; @@ -7565,6 +7584,8 @@ void l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags) break; } + l2cap_conn_put(conn); + drop: kfree_skb(skb); } > > > if (!conn) > > goto drop; > > > > @@ -7565,6 +7576,8 @@ void l2cap_recv_acldata(struct hci_conn *hcon, > > struct sk_buff *skb, u16 flags) > > break; > > } > > > > + l2cap_conn_put(conn); > > + > > drop: > > kfree_skb(skb); > > } > > > > > return; > > > } else { > > > bt_dev_err(hdev, "ACL packet for unknown connection handle %d", > > > -- > > > 2.47.0 -- Luiz Augusto von Dentz ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH] Bluetooth: hci_core: sync hci rx and cmd sync work 2025-01-16 15:31 ` Luiz Augusto von Dentz @ 2025-01-16 22:44 ` Hillf Danton 0 siblings, 0 replies; 9+ messages in thread From: Hillf Danton @ 2025-01-16 22:44 UTC (permalink / raw) To: Luiz Augusto von Dentz Cc: Edward Adam Davis, syzbot+31c2f641b850a348a734, johan.hedberg, linux-bluetooth, linux-kernel, marcel, syzkaller-bugs On Thu, 16 Jan 2025 10:31:03 -0500 Luiz Augusto von Dentz > On Thu, Jan 16, 2025 at 5:42 AM Hillf Danton <hdanton@sina.com> wrote: > > > > This does not work because conn can be freed before bumping refcnt up, > > and bumpup alone does not help l2cap_send_cmd() in case conn->hchan has been > > cleared in l2cap_conn_del(). > > Well then perhaps we can use hdev lock just to protect l2cap_data: > > diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c > index 27b4c4a2ba1f..00ef61609d49 100644 > --- a/net/bluetooth/l2cap_core.c > +++ b/net/bluetooth/l2cap_core.c > @@ -7466,14 +7466,33 @@ static void l2cap_recv_reset(struct l2cap_conn *conn) > conn->rx_len = 0; > } > > +static struct l2cap_conn *l2cap_conn_hold_unless_zero(struct l2cap_conn *c) > +{ > + BT_DBG("conn %p orig refcnt %u", c, kref_read(&c->ref)); > + > + if (!kref_get_unless_zero(&c->ref)) > + return NULL; > + > + return c; > +} > + > void l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags) > { > - struct l2cap_conn *conn = hcon->l2cap_data; > + struct l2cap_conn *conn; > int len; > > + /* Lock hdev to access l2cap_data to avoid race with l2cap_conn_del */ > + hci_dev_lock(hcon->hdev); > + > + conn = hcon->l2cap_data; > + > if (!conn) > conn = l2cap_conn_add(hcon); > > + conn = l2cap_conn_hold_unless_zero(conn); > + > + hci_dev_unlock(hcon->hdev); > + This does not work either because after releasing lock bumpup alone can not prevent conn->hchan from being cleared. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [syzbot] [bluetooth?] KASAN: slab-use-after-free Read in l2cap_send_cmd 2024-02-26 9:32 [syzbot] [bluetooth?] KASAN: slab-use-after-free Read in l2cap_send_cmd syzbot 2025-01-06 9:04 ` syzbot @ 2025-01-14 14:09 ` syzbot 1 sibling, 0 replies; 9+ messages in thread From: syzbot @ 2025-01-14 14:09 UTC (permalink / raw) To: davem, edumazet, hdanton, johan.hedberg, kuba, linux-bluetooth, linux-kernel, luiz.dentz, luiz.von.dentz, marcel, netdev, pabeni, syzkaller-bugs syzbot has bisected this issue to: commit e7b02296fb400ee64822fbdd81a0718449066333 Author: Luiz Augusto von Dentz <luiz.von.dentz@intel.com> Date: Thu Feb 1 16:18:58 2024 +0000 Bluetooth: Remove BT_HS bisection log: https://syzkaller.appspot.com/x/bisect.txt?x=10665bc4580000 start commit: ab75170520d4 Merge tag 'linux-watchdog-6.13-rc6' of git://.. git tree: upstream final oops: https://syzkaller.appspot.com/x/report.txt?x=12665bc4580000 console output: https://syzkaller.appspot.com/x/log.txt?x=14665bc4580000 kernel config: https://syzkaller.appspot.com/x/.config?x=1c541fa8af5c9cc7 dashboard link: https://syzkaller.appspot.com/bug?extid=31c2f641b850a348a734 syz repro: https://syzkaller.appspot.com/x/repro.syz?x=11261edf980000 C reproducer: https://syzkaller.appspot.com/x/repro.c?x=17fa36f8580000 Reported-by: syzbot+31c2f641b850a348a734@syzkaller.appspotmail.com Fixes: e7b02296fb40 ("Bluetooth: Remove BT_HS") For information about bisection process see: https://goo.gl/tpsmEJ#bisection ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2025-01-16 22:45 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-02-26 9:32 [syzbot] [bluetooth?] KASAN: slab-use-after-free Read in l2cap_send_cmd syzbot 2025-01-06 9:04 ` syzbot 2025-01-15 9:46 ` [PATCH] Bluetooth: hci_core: sync hci rx and cmd sync work Edward Adam Davis 2025-01-15 10:31 ` bluez.test.bot 2025-01-15 16:13 ` [PATCH] " Luiz Augusto von Dentz 2025-01-16 10:42 ` Hillf Danton 2025-01-16 15:31 ` Luiz Augusto von Dentz 2025-01-16 22:44 ` Hillf Danton 2025-01-14 14:09 ` [syzbot] [bluetooth?] KASAN: slab-use-after-free Read in l2cap_send_cmd syzbot
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).