Commit e6ed54e
committed
Bluetooth: MGMT: Fix UAF on mgmt_remove_adv_monitor_complete
This reworks MGMT_OP_REMOVE_ADV_MONITOR to not use mgmt_pending_add to
avoid crashes like bellow:
==================================================================
BUG: KASAN: slab-use-after-free in mgmt_remove_adv_monitor_complete+0xe5/0x540 net/bluetooth/mgmt.c:5406
Read of size 8 at addr ffff88801c53f318 by task kworker/u5:5/5341
CPU: 0 UID: 0 PID: 5341 Comm: kworker/u5:5 Not tainted 6.15.0-syzkaller-10402-g4cb6c8af8591 #0 PREEMPT(full)
Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2~bpo12+1 04/01/2014
Workqueue: hci0 hci_cmd_sync_work
Call Trace:
<TASK>
dump_stack_lvl+0x189/0x250 lib/dump_stack.c:120
print_address_description mm/kasan/report.c:408 [inline]
print_report+0xd2/0x2b0 mm/kasan/report.c:521
kasan_report+0x118/0x150 mm/kasan/report.c:634
mgmt_remove_adv_monitor_complete+0xe5/0x540 net/bluetooth/mgmt.c:5406
hci_cmd_sync_work+0x261/0x3a0 net/bluetooth/hci_sync.c:334
process_one_work kernel/workqueue.c:3238 [inline]
process_scheduled_works+0xade/0x17b0 kernel/workqueue.c:3321
worker_thread+0x8a0/0xda0 kernel/workqueue.c:3402
kthread+0x711/0x8a0 kernel/kthread.c:464
ret_from_fork+0x3fc/0x770 arch/x86/kernel/process.c:148
ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:245
</TASK>
Allocated by task 5987:
kasan_save_stack mm/kasan/common.c:47 [inline]
kasan_save_track+0x3e/0x80 mm/kasan/common.c:68
poison_kmalloc_redzone mm/kasan/common.c:377 [inline]
__kasan_kmalloc+0x93/0xb0 mm/kasan/common.c:394
kasan_kmalloc include/linux/kasan.h:260 [inline]
__kmalloc_cache_noprof+0x230/0x3d0 mm/slub.c:4358
kmalloc_noprof include/linux/slab.h:905 [inline]
kzalloc_noprof include/linux/slab.h:1039 [inline]
mgmt_pending_new+0x65/0x240 net/bluetooth/mgmt_util.c:252
mgmt_pending_add+0x34/0x120 net/bluetooth/mgmt_util.c:279
remove_adv_monitor+0x103/0x1b0 net/bluetooth/mgmt.c:5454
hci_mgmt_cmd+0x9c9/0xef0 net/bluetooth/hci_sock.c:1719
hci_sock_sendmsg+0x6ca/0xef0 net/bluetooth/hci_sock.c:1839
sock_sendmsg_nosec net/socket.c:712 [inline]
__sock_sendmsg+0x219/0x270 net/socket.c:727
sock_write_iter+0x258/0x330 net/socket.c:1131
new_sync_write fs/read_write.c:593 [inline]
vfs_write+0x548/0xa90 fs/read_write.c:686
ksys_write+0x145/0x250 fs/read_write.c:738
do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
do_syscall_64+0xfa/0x3b0 arch/x86/entry/syscall_64.c:94
entry_SYSCALL_64_after_hwframe+0x77/0x7f
Freed by task 5989:
kasan_save_stack mm/kasan/common.c:47 [inline]
kasan_save_track+0x3e/0x80 mm/kasan/common.c:68
kasan_save_free_info+0x46/0x50 mm/kasan/generic.c:576
poison_slab_object mm/kasan/common.c:247 [inline]
__kasan_slab_free+0x62/0x70 mm/kasan/common.c:264
kasan_slab_free include/linux/kasan.h:233 [inline]
slab_free_hook mm/slub.c:2380 [inline]
slab_free mm/slub.c:4642 [inline]
kfree+0x18e/0x440 mm/slub.c:4841
mgmt_pending_foreach+0xc9/0x120 net/bluetooth/mgmt_util.c:242
mgmt_index_removed+0x10d/0x2f0 net/bluetooth/mgmt.c:9366
hci_sock_bind+0xbe9/0x1000 net/bluetooth/hci_sock.c:1314
__sys_bind_socket net/socket.c:1810 [inline]
__sys_bind+0x2c3/0x3e0 net/socket.c:1841
__do_sys_bind net/socket.c:1846 [inline]
__se_sys_bind net/socket.c:1844 [inline]
__x64_sys_bind+0x7a/0x90 net/socket.c:1844
do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
do_syscall_64+0xfa/0x3b0 arch/x86/entry/syscall_64.c:94
entry_SYSCALL_64_after_hwframe+0x77/0x7f
Fixes: 66bd095 ("Bluetooth: advmon offload MSFT remove monitor")
Closes: https://syzkaller.appspot.com/bug?extid=feb0dc579bbe30a13190
Reported-by: syzbot+feb0dc579bbe30a13190@syzkaller.appspotmail.com
Tested-by: syzbot+feb0dc579bbe30a13190@syzkaller.appspotmail.com
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>1 parent bf2ffc4 commit e6ed54e
File tree
3 files changed
+12
-30
lines changed- include/net/bluetooth
- net/bluetooth
3 files changed
+12
-30
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2400 | 2400 | | |
2401 | 2401 | | |
2402 | 2402 | | |
2403 | | - | |
2404 | 2403 | | |
2405 | 2404 | | |
2406 | 2405 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1877 | 1877 | | |
1878 | 1878 | | |
1879 | 1879 | | |
1880 | | - | |
| 1880 | + | |
1881 | 1881 | | |
1882 | | - | |
1883 | | - | |
1884 | 1882 | | |
1885 | 1883 | | |
1886 | 1884 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5108 | 5108 | | |
5109 | 5109 | | |
5110 | 5110 | | |
5111 | | - | |
| 5111 | + | |
| 5112 | + | |
5112 | 5113 | | |
5113 | 5114 | | |
5114 | | - | |
5115 | | - | |
5116 | | - | |
5117 | | - | |
5118 | | - | |
5119 | | - | |
5120 | | - | |
5121 | | - | |
5122 | | - | |
5123 | | - | |
5124 | | - | |
5125 | 5115 | | |
5126 | 5116 | | |
5127 | 5117 | | |
5128 | | - | |
| 5118 | + | |
5129 | 5119 | | |
5130 | 5120 | | |
5131 | 5121 | | |
| |||
5227 | 5217 | | |
5228 | 5218 | | |
5229 | 5219 | | |
5230 | | - | |
5231 | | - | |
| 5220 | + | |
5232 | 5221 | | |
5233 | 5222 | | |
5234 | 5223 | | |
| |||
5398 | 5387 | | |
5399 | 5388 | | |
5400 | 5389 | | |
5401 | | - | |
5402 | | - | |
| 5390 | + | |
5403 | 5391 | | |
5404 | 5392 | | |
5405 | 5393 | | |
| |||
5408 | 5396 | | |
5409 | 5397 | | |
5410 | 5398 | | |
5411 | | - | |
| 5399 | + | |
| 5400 | + | |
5412 | 5401 | | |
| 5402 | + | |
5413 | 5403 | | |
5414 | 5404 | | |
5415 | 5405 | | |
5416 | | - | |
| 5406 | + | |
5417 | 5407 | | |
5418 | 5408 | | |
5419 | 5409 | | |
| |||
5423 | 5413 | | |
5424 | 5414 | | |
5425 | 5415 | | |
5426 | | - | |
5427 | | - | |
5428 | | - | |
5429 | | - | |
5430 | 5416 | | |
5431 | 5417 | | |
5432 | 5418 | | |
| |||
5445 | 5431 | | |
5446 | 5432 | | |
5447 | 5433 | | |
5448 | | - | |
5449 | 5434 | | |
5450 | 5435 | | |
5451 | 5436 | | |
5452 | 5437 | | |
5453 | 5438 | | |
5454 | 5439 | | |
5455 | | - | |
| 5440 | + | |
5456 | 5441 | | |
5457 | 5442 | | |
5458 | 5443 | | |
| |||
5462 | 5447 | | |
5463 | 5448 | | |
5464 | 5449 | | |
5465 | | - | |
| 5450 | + | |
5466 | 5451 | | |
5467 | 5452 | | |
5468 | 5453 | | |
| |||
0 commit comments