Vulnerability Details CVE-2022-49909
In the Linux kernel, the following vulnerability has been resolved:
Bluetooth: L2CAP: fix use-after-free in l2cap_conn_del()
When l2cap_recv_frame() is invoked to receive data, and the cid is
L2CAP_CID_A2MP, if the channel does not exist, it will create a channel.
However, after a channel is created, the hold operation of the channel
is not performed. In this case, the value of channel reference counting
is 1. As a result, after hci_error_reset() is triggered, l2cap_conn_del()
invokes the close hook function of A2MP to release the channel. Then
l2cap_chan_unlock(chan) will trigger UAF issue.
The process is as follows:
Receive data:
l2cap_data_channel()
a2mp_channel_create() --->channel ref is 2
l2cap_chan_put() --->channel ref is 1
Triger event:
hci_error_reset()
hci_dev_do_close()
...
l2cap_disconn_cfm()
l2cap_conn_del()
l2cap_chan_hold() --->channel ref is 2
l2cap_chan_del() --->channel ref is 1
a2mp_chan_close_cb() --->channel ref is 0, release channel
l2cap_chan_unlock() --->UAF of channel
The detailed Call Trace is as follows:
BUG: KASAN: use-after-free in __mutex_unlock_slowpath+0xa6/0x5e0
Read of size 8 at addr ffff8880160664b8 by task kworker/u11:1/7593
Workqueue: hci0 hci_error_reset
Call Trace:
<TASK>
dump_stack_lvl+0xcd/0x134
print_report.cold+0x2ba/0x719
kasan_report+0xb1/0x1e0
kasan_check_range+0x140/0x190
__mutex_unlock_slowpath+0xa6/0x5e0
l2cap_conn_del+0x404/0x7b0
l2cap_disconn_cfm+0x8c/0xc0
hci_conn_hash_flush+0x11f/0x260
hci_dev_close_sync+0x5f5/0x11f0
hci_dev_do_close+0x2d/0x70
hci_error_reset+0x9e/0x140
process_one_work+0x98a/0x1620
worker_thread+0x665/0x1080
kthread+0x2e4/0x3a0
ret_from_fork+0x1f/0x30
</TASK>
Allocated by task 7593:
kasan_save_stack+0x1e/0x40
__kasan_kmalloc+0xa9/0xd0
l2cap_chan_create+0x40/0x930
amp_mgr_create+0x96/0x990
a2mp_channel_create+0x7d/0x150
l2cap_recv_frame+0x51b8/0x9a70
l2cap_recv_acldata+0xaa3/0xc00
hci_rx_work+0x702/0x1220
process_one_work+0x98a/0x1620
worker_thread+0x665/0x1080
kthread+0x2e4/0x3a0
ret_from_fork+0x1f/0x30
Freed by task 7593:
kasan_save_stack+0x1e/0x40
kasan_set_track+0x21/0x30
kasan_set_free_info+0x20/0x30
____kasan_slab_free+0x167/0x1c0
slab_free_freelist_hook+0x89/0x1c0
kfree+0xe2/0x580
l2cap_chan_put+0x22a/0x2d0
l2cap_conn_del+0x3fc/0x7b0
l2cap_disconn_cfm+0x8c/0xc0
hci_conn_hash_flush+0x11f/0x260
hci_dev_close_sync+0x5f5/0x11f0
hci_dev_do_close+0x2d/0x70
hci_error_reset+0x9e/0x140
process_one_work+0x98a/0x1620
worker_thread+0x665/0x1080
kthread+0x2e4/0x3a0
ret_from_fork+0x1f/0x30
Last potentially related work creation:
kasan_save_stack+0x1e/0x40
__kasan_record_aux_stack+0xbe/0xd0
call_rcu+0x99/0x740
netlink_release+0xe6a/0x1cf0
__sock_release+0xcd/0x280
sock_close+0x18/0x20
__fput+0x27c/0xa90
task_work_run+0xdd/0x1a0
exit_to_user_mode_prepare+0x23c/0x250
syscall_exit_to_user_mode+0x19/0x50
do_syscall_64+0x42/0x80
entry_SYSCALL_64_after_hwframe+0x63/0xcd
Second to last potentially related work creation:
kasan_save_stack+0x1e/0x40
__kasan_record_aux_stack+0xbe/0xd0
call_rcu+0x99/0x740
netlink_release+0xe6a/0x1cf0
__sock_release+0xcd/0x280
sock_close+0x18/0x20
__fput+0x27c/0xa90
task_work_run+0xdd/0x1a0
exit_to_user_mode_prepare+0x23c/0x250
syscall_exit_to_user_mode+0x19/0x50
do_syscall_64+0x42/0x80
entry_SYSCALL_64_after_hwframe+0x63/0xcd
Exploit prediction scoring system (EPSS) score
EPSS Score 0.0
EPSS Ranking 1.4%
CVSS Severity
CVSS v3 Score 7.8
Products affected by CVE-2022-49909
-
cpe:2.3:o:linux:linux_kernel:4.14.291
-
cpe:2.3:o:linux:linux_kernel:4.14.292
-
cpe:2.3:o:linux:linux_kernel:4.14.293
-
cpe:2.3:o:linux:linux_kernel:4.14.294
-
cpe:2.3:o:linux:linux_kernel:4.14.295
-
cpe:2.3:o:linux:linux_kernel:4.14.296
-
cpe:2.3:o:linux:linux_kernel:4.14.297
-
cpe:2.3:o:linux:linux_kernel:4.14.298
-
cpe:2.3:o:linux:linux_kernel:4.19.255
-
cpe:2.3:o:linux:linux_kernel:4.19.256
-
cpe:2.3:o:linux:linux_kernel:4.19.257
-
cpe:2.3:o:linux:linux_kernel:4.19.258
-
cpe:2.3:o:linux:linux_kernel:4.19.259
-
cpe:2.3:o:linux:linux_kernel:4.19.260
-
cpe:2.3:o:linux:linux_kernel:4.19.261
-
cpe:2.3:o:linux:linux_kernel:4.19.262
-
cpe:2.3:o:linux:linux_kernel:4.19.263
-
cpe:2.3:o:linux:linux_kernel:4.19.264
-
cpe:2.3:o:linux:linux_kernel:4.9.326
-
cpe:2.3:o:linux:linux_kernel:4.9.327
-
cpe:2.3:o:linux:linux_kernel:4.9.328
-
cpe:2.3:o:linux:linux_kernel:4.9.329
-
cpe:2.3:o:linux:linux_kernel:4.9.330
-
cpe:2.3:o:linux:linux_kernel:4.9.331
-
cpe:2.3:o:linux:linux_kernel:4.9.332
-
cpe:2.3:o:linux:linux_kernel:5.10.135
-
cpe:2.3:o:linux:linux_kernel:5.10.136
-
cpe:2.3:o:linux:linux_kernel:5.10.137
-
cpe:2.3:o:linux:linux_kernel:5.10.138
-
cpe:2.3:o:linux:linux_kernel:5.10.139
-
cpe:2.3:o:linux:linux_kernel:5.10.140
-
cpe:2.3:o:linux:linux_kernel:5.10.141
-
cpe:2.3:o:linux:linux_kernel:5.10.142
-
cpe:2.3:o:linux:linux_kernel:5.10.143
-
cpe:2.3:o:linux:linux_kernel:5.10.144
-
cpe:2.3:o:linux:linux_kernel:5.10.145
-
cpe:2.3:o:linux:linux_kernel:5.10.146
-
cpe:2.3:o:linux:linux_kernel:5.10.147
-
cpe:2.3:o:linux:linux_kernel:5.10.148
-
cpe:2.3:o:linux:linux_kernel:5.10.149
-
cpe:2.3:o:linux:linux_kernel:5.10.150
-
cpe:2.3:o:linux:linux_kernel:5.10.151
-
cpe:2.3:o:linux:linux_kernel:5.10.152
-
cpe:2.3:o:linux:linux_kernel:5.10.153
-
cpe:2.3:o:linux:linux_kernel:5.15.59
-
cpe:2.3:o:linux:linux_kernel:5.15.60
-
cpe:2.3:o:linux:linux_kernel:5.15.61
-
cpe:2.3:o:linux:linux_kernel:5.15.62
-
cpe:2.3:o:linux:linux_kernel:5.15.63
-
cpe:2.3:o:linux:linux_kernel:5.15.64
-
cpe:2.3:o:linux:linux_kernel:5.15.65
-
cpe:2.3:o:linux:linux_kernel:5.15.66
-
cpe:2.3:o:linux:linux_kernel:5.15.67
-
cpe:2.3:o:linux:linux_kernel:5.15.68
-
cpe:2.3:o:linux:linux_kernel:5.15.69
-
cpe:2.3:o:linux:linux_kernel:5.15.70
-
cpe:2.3:o:linux:linux_kernel:5.15.71
-
cpe:2.3:o:linux:linux_kernel:5.15.72
-
cpe:2.3:o:linux:linux_kernel:5.15.73
-
cpe:2.3:o:linux:linux_kernel:5.15.74
-
cpe:2.3:o:linux:linux_kernel:5.15.75
-
cpe:2.3:o:linux:linux_kernel:5.15.76
-
cpe:2.3:o:linux:linux_kernel:5.15.77
-
cpe:2.3:o:linux:linux_kernel:5.18.16
-
cpe:2.3:o:linux:linux_kernel:5.18.17
-
cpe:2.3:o:linux:linux_kernel:5.18.18
-
cpe:2.3:o:linux:linux_kernel:5.18.19
-
cpe:2.3:o:linux:linux_kernel:5.19
-
cpe:2.3:o:linux:linux_kernel:5.19.1
-
cpe:2.3:o:linux:linux_kernel:5.19.10
-
cpe:2.3:o:linux:linux_kernel:5.19.11
-
cpe:2.3:o:linux:linux_kernel:5.19.12
-
cpe:2.3:o:linux:linux_kernel:5.19.13
-
cpe:2.3:o:linux:linux_kernel:5.19.14
-
cpe:2.3:o:linux:linux_kernel:5.19.15
-
cpe:2.3:o:linux:linux_kernel:5.19.16
-
cpe:2.3:o:linux:linux_kernel:5.19.17
-
cpe:2.3:o:linux:linux_kernel:5.19.2
-
cpe:2.3:o:linux:linux_kernel:5.19.3
-
cpe:2.3:o:linux:linux_kernel:5.19.4
-
cpe:2.3:o:linux:linux_kernel:5.19.5
-
cpe:2.3:o:linux:linux_kernel:5.19.6
-
cpe:2.3:o:linux:linux_kernel:5.19.7
-
cpe:2.3:o:linux:linux_kernel:5.19.8
-
cpe:2.3:o:linux:linux_kernel:5.19.9
-
cpe:2.3:o:linux:linux_kernel:5.4.209
-
cpe:2.3:o:linux:linux_kernel:5.4.210
-
cpe:2.3:o:linux:linux_kernel:5.4.211
-
cpe:2.3:o:linux:linux_kernel:5.4.212
-
cpe:2.3:o:linux:linux_kernel:5.4.213
-
cpe:2.3:o:linux:linux_kernel:5.4.214
-
cpe:2.3:o:linux:linux_kernel:5.4.215
-
cpe:2.3:o:linux:linux_kernel:5.4.216
-
cpe:2.3:o:linux:linux_kernel:5.4.217
-
cpe:2.3:o:linux:linux_kernel:5.4.218
-
cpe:2.3:o:linux:linux_kernel:5.4.219
-
cpe:2.3:o:linux:linux_kernel:5.4.220
-
cpe:2.3:o:linux:linux_kernel:5.4.221
-
cpe:2.3:o:linux:linux_kernel:5.4.222
-
cpe:2.3:o:linux:linux_kernel:5.4.223
-
cpe:2.3:o:linux:linux_kernel:6.0
-
cpe:2.3:o:linux:linux_kernel:6.0.1
-
cpe:2.3:o:linux:linux_kernel:6.0.2
-
cpe:2.3:o:linux:linux_kernel:6.0.3
-
cpe:2.3:o:linux:linux_kernel:6.0.4
-
cpe:2.3:o:linux:linux_kernel:6.0.5
-
cpe:2.3:o:linux:linux_kernel:6.0.6
-
cpe:2.3:o:linux:linux_kernel:6.0.7
-
cpe:2.3:o:linux:linux_kernel:6.1