syzbot


KASAN: slab-use-after-free Read in hci_uart_write_work

Status: premoderation: reported on 2025/09/11 04:00
Reported-by: syzbot+b2af8a3c78c06c28ed44@syzkaller.appspotmail.com
First crash: 1d14h, last: 1d14h
Similar bugs (2)
Kernel Title Rank 🛈 Repro Cause bisect Fix bisect Count Last Reported Patched Status
upstream KASAN: slab-use-after-free Read in hci_uart_write_work bluetooth 19 syz 2 47d 60d 0/29 upstream: reported syz repro on 2025/07/14 17:09
android-6-1 KASAN: use-after-free Read in hci_uart_write_work 19 1 4d08h 4d08h 0/2 premoderation: reported on 2025/09/08 09:39

Sample crash report:
usb 5-1: config 0 has 0 interfaces, different from the descriptor's value: 1
usb 5-1: New USB device found, idVendor=047f, idProduct=ffff, bcdDevice= 0.00
usb 5-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
usb 5-1: config 0 descriptor??
==================================================================
BUG: KASAN: slab-use-after-free in hci_uart_write_work+0x44a/0x790 drivers/bluetooth/hci_ldisc.c:165
Read of size 8 at addr ffff8881237be9a8 by task kworker/1:3/446

CPU: 1 UID: 0 PID: 446 Comm: kworker/1:3 Not tainted syzkaller #0 999ed7ff739122807d950cd03a17deb2b8fbe7d9
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 07/12/2025
Workqueue: events hci_uart_write_work
Call Trace:
 <TASK>
 __dump_stack+0x21/0x30 lib/dump_stack.c:94
 dump_stack_lvl+0x10c/0x190 lib/dump_stack.c:120
 print_address_description+0x71/0x200 mm/kasan/report.c:377
 print_report+0x4a/0x70 mm/kasan/report.c:479
 kasan_report+0x163/0x1a0 mm/kasan/report.c:592
 __asan_report_load8_noabort+0x18/0x20 mm/kasan/report_generic.c:381
 hci_uart_write_work+0x44a/0x790 drivers/bluetooth/hci_ldisc.c:165
 process_one_work kernel/workqueue.c:3238 [inline]
 process_scheduled_works+0x7d5/0x1020 kernel/workqueue.c:3319
 worker_thread+0xc58/0x1250 kernel/workqueue.c:3400
 kthread+0x2c7/0x370 kernel/kthread.c:389
 ret_from_fork+0x67/0xa0 arch/x86/kernel/process.c:153
 ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244
 </TASK>

Allocated by task 881:
 kasan_save_stack mm/kasan/common.c:48 [inline]
 kasan_save_track+0x3e/0x80 mm/kasan/common.c:69
 kasan_save_alloc_info+0x40/0x50 mm/kasan/generic.c:565
 unpoison_slab_object mm/kasan/common.c:320 [inline]
 __kasan_slab_alloc+0x73/0x90 mm/kasan/common.c:346
 kasan_slab_alloc include/linux/kasan.h:250 [inline]
 slab_post_alloc_hook mm/slub.c:4169 [inline]
 slab_alloc_node mm/slub.c:4218 [inline]
 kmem_cache_alloc_node_noprof+0x139/0x3b0 mm/slub.c:4272
 __alloc_skb+0x10c/0x370 net/core/skbuff.c:677
 alloc_skb include/linux/skbuff.h:1331 [inline]
 bt_skb_alloc include/net/bluetooth/bluetooth.h:495 [inline]
 hci_cmd_sync_alloc+0x3b/0x320 net/bluetooth/hci_sync.c:58
 hci_cmd_sync_add net/bluetooth/hci_sync.c:99 [inline]
 __hci_cmd_sync_sk+0x12d/0xa50 net/bluetooth/hci_sync.c:168
 __hci_cmd_sync_status_sk net/bluetooth/hci_sync.c:263 [inline]
 __hci_cmd_sync_status net/bluetooth/hci_sync.c:287 [inline]
 hci_read_local_features_sync net/bluetooth/hci_sync.c:3704 [inline]
 hci_init_stage_sync net/bluetooth/hci_sync.c:3619 [inline]
 hci_init1_sync net/bluetooth/hci_sync.c:3751 [inline]
 hci_init_sync net/bluetooth/hci_sync.c:4831 [inline]
 hci_dev_init_sync net/bluetooth/hci_sync.c:5023 [inline]
 hci_dev_open_sync+0x1053/0x2980 net/bluetooth/hci_sync.c:5101
 hci_dev_do_open net/bluetooth/hci_core.c:412 [inline]
 hci_power_on+0x199/0x570 net/bluetooth/hci_core.c:941
 process_one_work kernel/workqueue.c:3238 [inline]
 process_scheduled_works+0x7d5/0x1020 kernel/workqueue.c:3319
 worker_thread+0xc58/0x1250 kernel/workqueue.c:3400
 kthread+0x2c7/0x370 kernel/kthread.c:389
 ret_from_fork+0x67/0xa0 arch/x86/kernel/process.c:153
 ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244

Freed by task 17246:
 kasan_save_stack mm/kasan/common.c:48 [inline]
 kasan_save_track+0x3e/0x80 mm/kasan/common.c:69
 kasan_save_free_info+0x4a/0x60 mm/kasan/generic.c:579
 poison_slab_object mm/kasan/common.c:248 [inline]
 __kasan_slab_free+0x5f/0x80 mm/kasan/common.c:265
 kasan_slab_free include/linux/kasan.h:233 [inline]
 slab_free_hook mm/slub.c:2418 [inline]
 slab_free mm/slub.c:4672 [inline]
 kmem_cache_free+0x1c1/0x510 mm/slub.c:4779
 kfree_skbmem net/core/skbuff.c:-1 [inline]
 __kfree_skb+0x18f/0x210 net/core/skbuff.c:1203
 sk_skb_reason_drop+0xd8/0x310 net/core/skbuff.c:1240
 kfree_skb_reason include/linux/skbuff.h:1271 [inline]
 kfree_skb include/linux/skbuff.h:1280 [inline]
 hci_uart_flush+0xa0/0x380 drivers/bluetooth/hci_ldisc.c:235
 hci_uart_close drivers/bluetooth/hci_ldisc.c:268 [inline]
 hci_uart_tty_close+0x7e/0x230 drivers/bluetooth/hci_ldisc.c:545
 tty_ldisc_close drivers/tty/tty_ldisc.c:455 [inline]
 tty_ldisc_kill drivers/tty/tty_ldisc.c:613 [inline]
 tty_ldisc_hangup+0x4dc/0x6e0 drivers/tty/tty_ldisc.c:729
 __tty_hangup+0x585/0x810 drivers/tty/tty_io.c:624
 tty_vhangup drivers/tty/tty_io.c:694 [inline]
 tty_ioctl+0x7c9/0xec0 drivers/tty/tty_io.c:2743
 vfs_ioctl fs/ioctl.c:51 [inline]
 __do_sys_ioctl fs/ioctl.c:907 [inline]
 __se_sys_ioctl+0x132/0x1b0 fs/ioctl.c:893
 __x64_sys_ioctl+0x7f/0xa0 fs/ioctl.c:893
 x64_sys_call+0x1878/0x2ee0 arch/x86/include/generated/asm/syscalls_64.h:17
 do_syscall_x64 arch/x86/entry/common.c:52 [inline]
 do_syscall_64+0x58/0xf0 arch/x86/entry/common.c:83
 entry_SYSCALL_64_after_hwframe+0x76/0x7e

The buggy address belongs to the object at ffff8881237be8c0
 which belongs to the cache skbuff_head_cache of size 256
The buggy address is located 232 bytes inside of
 freed 256-byte region [ffff8881237be8c0, ffff8881237be9c0)

The buggy address belongs to the physical page:
page: refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x1237be
flags: 0x4000000000000000(zone=1)
page_type: f5(slab)
raw: 4000000000000000 ffff88810664a500 ffffea00048fff80 dead000000000004
raw: 0000000000000000 00000000000c000c 00000001f5000000 0000000000000000
page dumped because: kasan: bad access detected
page_owner tracks the page as allocated
page last allocated via order 0, migratetype Unmovable, gfp_mask 0x172820(GFP_ATOMIC|__GFP_NOWARN|__GFP_NORETRY|__GFP_COMP|__GFP_MEMALLOC|__GFP_HARDWALL), pid 331, tgid 331 (kworker/0:2), ts 641113985038, free_ts 641045590511
 set_page_owner include/linux/page_owner.h:35 [inline]
 post_alloc_hook+0x3b9/0x3f0 mm/page_alloc.c:1826
 prep_new_page+0x1c/0x120 mm/page_alloc.c:1834
 get_page_from_freelist+0x48ce/0x4960 mm/page_alloc.c:3914
 __alloc_pages_noprof+0x31f/0x7b0 mm/page_alloc.c:5258
 alloc_slab_page+0x6b/0x1f0 mm/slub.c:-1
 allocate_slab+0x69/0x440 mm/slub.c:2660
 new_slab mm/slub.c:2714 [inline]
 ___slab_alloc+0x59a/0x8b0 mm/slub.c:3902
 __slab_alloc mm/slub.c:3992 [inline]
 __slab_alloc_node mm/slub.c:4045 [inline]
 slab_alloc_node mm/slub.c:4206 [inline]
 kmem_cache_alloc_node_noprof+0x20a/0x3b0 mm/slub.c:4272
 __alloc_skb+0x10c/0x370 net/core/skbuff.c:677
 __netdev_alloc_skb+0x108/0x420 net/core/skbuff.c:751
 netdev_alloc_skb include/linux/skbuff.h:3373 [inline]
 dev_alloc_skb include/linux/skbuff.h:3386 [inline]
 br_send_bpdu+0x31/0x4f0 net/bridge/br_stp_bpdu.c:40
 br_send_config_bpdu+0x45e/0x730 net/bridge/br_stp_bpdu.c:120
 br_transmit_config+0x3e7/0x6c0 net/bridge/br_stp.c:241
 br_config_bpdu_generation+0x126/0x1d0 net/bridge/br_stp.c:400
 br_hello_timer_expired+0x95/0x180 net/bridge/br_stp_timer.c:37
 call_timer_fn+0x49/0x300 kernel/time/timer.c:1797
page last free pid 9 tgid 9 stack trace:
 reset_page_owner include/linux/page_owner.h:28 [inline]
 free_pages_prepare mm/page_alloc.c:1352 [inline]
 free_unref_page+0xb4d/0xee0 mm/page_alloc.c:2842
 __free_pages+0x6b/0x3b0 mm/page_alloc.c:5345
 __free_slab+0xb6/0x110 mm/slub.c:2731
 free_slab+0x18/0xf0 mm/slub.c:2754
 discard_slab mm/slub.c:2760 [inline]
 __put_partials+0x11b/0x150 mm/slub.c:3229
 put_cpu_partial+0x91/0xc0 mm/slub.c:3304
 __slab_free+0x1d3/0x2b0 mm/slub.c:4542
 do_slab_free mm/slub.c:4624 [inline]
 ___cache_free+0xc9/0xe0 mm/slub.c:4735
 qlink_free mm/kasan/quarantine.c:163 [inline]
 qlist_free_all+0xb5/0x130 mm/kasan/quarantine.c:179
 kasan_quarantine_reduce+0x14f/0x180 mm/kasan/quarantine.c:286
 __kasan_slab_alloc+0x28/0x90 mm/kasan/common.c:330
 kasan_slab_alloc include/linux/kasan.h:250 [inline]
 slab_post_alloc_hook mm/slub.c:4169 [inline]
 slab_alloc_node mm/slub.c:4218 [inline]
 kmem_cache_alloc_node_noprof+0x139/0x3b0 mm/slub.c:4272
 __alloc_skb+0x10c/0x370 net/core/skbuff.c:677
 alloc_skb include/linux/skbuff.h:1331 [inline]
 mld_newpack+0x152/0x9e0 net/ipv6/mcast.c:1745
 add_grhead+0x67/0x310 net/ipv6/mcast.c:1856
 add_grec+0xf16/0x11e0 net/ipv6/mcast.c:1994

Memory state around the buggy address:
 ffff8881237be880: fc fc fc fc fc fc fc fc fa fb fb fb fb fb fb fb
 ffff8881237be900: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
>ffff8881237be980: fb fb fb fb fb fb fb fb fc fc fc fc fc fc fc fc
                                  ^
 ffff8881237bea00: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
 ffff8881237bea80: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
==================================================================

Crashes (1):
Time Kernel Commit Syzkaller Config Log Report Syz repro C repro VM info Assets (help?) Manager Title
2025/09/11 03:59 android16-6.12 15806a231d41 fdeaa69b .config console log report info [disk image] [vmlinux] [kernel image] ci2-android-6-12-rust KASAN: slab-use-after-free Read in hci_uart_write_work
* Struck through repros no longer work on HEAD.