Lihong Kou
f9c70bdc27
Bluetooth: add a mutex lock to avoid UAF in do_enale_set
...
In the case we set or free the global value listen_chan in
different threads, we can encounter the UAF problems because
the method is not protected by any lock, add one to avoid
this bug.
BUG: KASAN: use-after-free in l2cap_chan_close+0x48/0x990
net/bluetooth/l2cap_core.c:730
Read of size 8 at addr ffff888096950000 by task kworker/1:102/2868
CPU: 1 PID: 2868 Comm: kworker/1:102 Not tainted 5.5.0-syzkaller #0
Hardware name: Google Google Compute Engine/Google Compute Engine,
BIOS Google 01/01/2011
Workqueue: events do_enable_set
Call Trace:
__dump_stack lib/dump_stack.c:77 [inline]
dump_stack+0x1fb/0x318 lib/dump_stack.c:118
print_address_description+0x74/0x5c0 mm/kasan/report.c:374
__kasan_report+0x149/0x1c0 mm/kasan/report.c:506
kasan_report+0x26/0x50 mm/kasan/common.c:641
__asan_report_load8_noabort+0x14/0x20 mm/kasan/generic_report.c:135
l2cap_chan_close+0x48/0x990 net/bluetooth/l2cap_core.c:730
do_enable_set+0x660/0x900 net/bluetooth/6lowpan.c:1074
process_one_work+0x7f5/0x10f0 kernel/workqueue.c:2264
worker_thread+0xbbc/0x1630 kernel/workqueue.c:2410
kthread+0x332/0x350 kernel/kthread.c:255
ret_from_fork+0x24/0x30 arch/x86/entry/entry_64.S:352
Allocated by task 2870:
save_stack mm/kasan/common.c:72 [inline]
set_track mm/kasan/common.c:80 [inline]
__kasan_kmalloc+0x118/0x1c0 mm/kasan/common.c:515
kasan_kmalloc+0x9/0x10 mm/kasan/common.c:529
kmem_cache_alloc_trace+0x221/0x2f0 mm/slab.c:3551
kmalloc include/linux/slab.h:555 [inline]
kzalloc include/linux/slab.h:669 [inline]
l2cap_chan_create+0x50/0x320 net/bluetooth/l2cap_core.c:446
chan_create net/bluetooth/6lowpan.c:640 [inline]
bt_6lowpan_listen net/bluetooth/6lowpan.c:959 [inline]
do_enable_set+0x6a4/0x900 net/bluetooth/6lowpan.c:1078
process_one_work+0x7f5/0x10f0 kernel/workqueue.c:2264
worker_thread+0xbbc/0x1630 kernel/workqueue.c:2410
kthread+0x332/0x350 kernel/kthread.c:255
ret_from_fork+0x24/0x30 arch/x86/entry/entry_64.S:352
Freed by task 2870:
save_stack mm/kasan/common.c:72 [inline]
set_track mm/kasan/common.c:80 [inline]
kasan_set_free_info mm/kasan/common.c:337 [inline]
__kasan_slab_free+0x12e/0x1e0 mm/kasan/common.c:476
kasan_slab_free+0xe/0x10 mm/kasan/common.c:485
__cache_free mm/slab.c:3426 [inline]
kfree+0x10d/0x220 mm/slab.c:3757
l2cap_chan_destroy net/bluetooth/l2cap_core.c:484 [inline]
kref_put include/linux/kref.h:65 [inline]
l2cap_chan_put+0x170/0x190 net/bluetooth/l2cap_core.c:498
do_enable_set+0x66c/0x900 net/bluetooth/6lowpan.c:1075
process_one_work+0x7f5/0x10f0 kernel/workqueue.c:2264
worker_thread+0xbbc/0x1630 kernel/workqueue.c:2410
kthread+0x332/0x350 kernel/kthread.c:255
ret_from_fork+0x24/0x30 arch/x86/entry/entry_64.S:352
The buggy address belongs to the object at ffff888096950000
which belongs to the cache kmalloc-2k of size 2048
The buggy address is located 0 bytes inside of
2048-byte region [ffff888096950000, ffff888096950800)
The buggy address belongs to the page:
page:ffffea00025a5400 refcount:1 mapcount:0 mapping:ffff8880aa400e00 index:0x0
flags: 0xfffe0000000200(slab)
raw: 00fffe0000000200 ffffea00027d1548 ffffea0002397808 ffff8880aa400e00
raw: 0000000000000000 ffff888096950000 0000000100000001 0000000000000000
page dumped because: kasan: bad access detected
Memory state around the buggy address:
ffff88809694ff00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ffff88809694ff80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>ffff888096950000: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
^
ffff888096950080: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
ffff888096950100: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
==================================================================
Reported-by: syzbot+96414aa0033c363d8458@syzkaller.appspotmail.com
Signed-off-by: Lihong Kou <koulihong@huawei.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
2020-06-23 14:30:07 +02:00
..
2020-03-27 09:29:56 +00:00
2020-02-24 13:02:53 -08:00
2020-05-07 18:11:07 -07:00
2020-05-18 17:35:02 -07:00
2020-05-20 20:31:36 -04:00
2020-05-24 13:47:27 -07:00
2020-05-26 15:19:29 -07:00
2020-06-23 14:30:07 +02:00
2020-05-19 17:56:34 +02:00
2020-04-03 13:12:26 -07:00
2020-06-01 11:56:11 -07:00
2020-04-30 12:13:07 -07:00
2019-12-08 11:52:02 +01:00
2020-05-31 17:48:46 -07:00
2020-06-02 11:50:23 -07:00
2020-05-18 17:35:02 -07:00
2020-05-01 17:02:27 -07:00
2020-04-28 14:39:46 -07:00
2020-05-31 17:48:46 -07:00
2020-05-23 16:56:17 -07:00
2020-05-29 17:28:30 -07:00
2020-05-07 17:40:02 -07:00
2020-05-08 22:25:10 -07:00
2020-06-01 14:57:14 -07:00
2020-06-01 15:53:08 -07:00
2020-05-19 12:50:14 -07:00
2020-03-16 17:14:02 -07:00
2020-05-31 17:48:46 -07:00
2020-04-30 12:56:35 -07:00
2020-02-26 20:38:13 -08:00
2020-05-31 17:48:46 -07:00
2020-05-29 21:20:20 -07:00
2020-05-31 17:48:46 -07:00
2020-01-09 18:36:22 -08:00
2020-06-01 11:46:30 -07:00
2020-05-12 18:12:40 -07:00
2020-05-13 12:30:50 -07:00
2020-05-04 12:05:56 -07:00
2020-03-12 22:34:48 -07:00
2020-04-25 20:48:21 -07:00
2020-03-15 00:25:25 -07:00
2020-04-27 02:07:40 -04:00
2020-05-23 16:36:05 -07:00
2020-05-31 17:48:46 -07:00
2020-05-28 11:11:45 -07:00
2019-12-16 10:15:49 +01:00
2020-05-04 12:05:56 -07:00
2020-05-28 11:11:46 -07:00
2020-06-01 12:01:05 -07:00
2020-05-31 17:48:46 -07:00
2020-05-30 18:12:25 -07:00
2020-05-28 11:11:46 -07:00
2020-02-26 20:58:33 -08:00
2020-06-02 15:13:47 -07:00
2020-06-01 14:48:32 -07:00
2020-02-28 12:12:53 -08:00
2020-05-30 17:44:01 -07:00
2020-05-31 17:48:46 -07:00
2020-05-06 22:10:13 -07:00
2020-05-31 17:48:46 -07:00
2020-05-31 17:48:46 -07:00
2020-06-01 12:05:45 -07:00
2020-05-23 16:56:17 -07:00
2020-05-10 12:28:41 -07:00
2020-05-23 16:56:17 -07:00
2020-05-29 13:10:39 -07:00