CVE-2024-27398

Bluetooth: Fix use-after-free bugs caused by sco_sock_timeout

HIGH
7.8
CVSS Score
Published: May 13, 2024 at 10:22 AM UTC
Updated: August 5, 2026 at 12:04 PM UTC
3 products affected across 3 vendorsLinux KernelDebian LinuxFedora

Using Linux by Linux?

Get instant alerts when new vulnerabilities affect Linux - before attackers find them.

Real-time alertsTrack your software stackFree plan available
Severity
HIGH7.8
Exploit prediction
EPSS 0.8%
SSVC
No known exploit

Description

In the Linux kernel, the following vulnerability has been resolved: Bluetooth: Fix use-after-free bugs caused by sco_sock_timeout When the sco connection is established and then, the sco socket is releasing, timeout_work will be scheduled to judge whether the sco disconnection is timeout. The sock will be deallocated later, but it is dereferenced again in sco_sock_timeout. As a result, the use-after-free bugs will happen. The root cause is shown below: Cleanup Thread | Worker Thread sco_sock_release | sco_sock_close | __sco_sock_close | sco_sock_set_timer | schedule_delayed_work | sco_sock_kill | (wait a time) sock_put(sk) //FREE | sco_sock_timeout | sock_hold(sk) //USE The KASAN report triggered by POC is shown below: [ 95.890016] ================================================================== [ 95.890496] BUG: KASAN: slab-use-after-free in sco_sock_timeout+0x5e/0x1c0 [ 95.890755] Write of size 4 at addr ffff88800c388080 by task kworker/0:0/7 ... [ 95.890755] Workqueue: events sco_sock_timeout [ 95.890755] Call Trace: [ 95.890755] <TASK> [ 95.890755] dump_stack_lvl+0x45/0x110 [ 95.890755] print_address_description+0x78/0x390 [ 95.890755] print_report+0x11b/0x250 [ 95.890755] ? __virt_addr_valid+0xbe/0xf0 [ 95.890755] ? sco_sock_timeout+0x5e/0x1c0 [ 95.890755] kasan_report+0x139/0x170 [ 95.890755] ? update_load_avg+0xe5/0x9f0 [ 95.890755] ? sco_sock_timeout+0x5e/0x1c0 [ 95.890755] kasan_check_range+0x2c3/0x2e0 [ 95.890755] sco_sock_timeout+0x5e/0x1c0 [ 95.890755] process_one_work+0x561/0xc50 [ 95.890755] worker_thread+0xab2/0x13c0 [ 95.890755] ? pr_cont_work+0x490/0x490 [ 95.890755] kthread+0x279/0x300 [ 95.890755] ? pr_cont_work+0x490/0x490 [ 95.890755] ? kthread_blkcg+0xa0/0xa0 [ 95.890755] ret_from_fork+0x34/0x60 [ 95.890755] ? kthread_blkcg+0xa0/0xa0 [ 95.890755] ret_from_fork_asm+0x11/0x20 [ 95.890755] </TASK> [ 95.890755] [ 95.890755] Allocated by task 506: [ 95.890755] kasan_save_track+0x3f/0x70 [ 95.890755] __kasan_kmalloc+0x86/0x90 [ 95.890755] __kmalloc+0x17f/0x360 [ 95.890755] sk_prot_alloc+0xe1/0x1a0 [ 95.890755] sk_alloc+0x31/0x4e0 [ 95.890755] bt_sock_alloc+0x2b/0x2a0 [ 95.890755] sco_sock_create+0xad/0x320 [ 95.890755] bt_sock_create+0x145/0x320 [ 95.890755] __sock_create+0x2e1/0x650 [ 95.890755] __sys_socket+0xd0/0x280 [ 95.890755] __x64_sys_socket+0x75/0x80 [ 95.890755] do_syscall_64+0xc4/0x1b0 [ 95.890755] entry_SYSCALL_64_after_hwframe+0x67/0x6f [ 95.890755] [ 95.890755] Freed by task 506: [ 95.890755] kasan_save_track+0x3f/0x70 [ 95.890755] kasan_save_free_info+0x40/0x50 [ 95.890755] poison_slab_object+0x118/0x180 [ 95.890755] __kasan_slab_free+0x12/0x30 [ 95.890755] kfree+0xb2/0x240 [ 95.890755] __sk_destruct+0x317/0x410 [ 95.890755] sco_sock_release+0x232/0x280 [ 95.890755] sock_close+0xb2/0x210 [ 95.890755] __fput+0x37f/0x770 [ 95.890755] task_work_run+0x1ae/0x210 [ 95.890755] get_signal+0xe17/0xf70 [ 95.890755] arch_do_signal_or_restart+0x3f/0x520 [ 95.890755] syscall_exit_to_user_mode+0x55/0x120 [ 95.890755] do_syscall_64+0xd1/0x1b0 [ 95.890755] entry_SYSCALL_64_after_hwframe+0x67/0x6f [ 95.890755] [ 95.890755] The buggy address belongs to the object at ffff88800c388000 [ 95.890755] which belongs to the cache kmalloc-1k of size 1024 [ 95.890755] The buggy address is located 128 bytes inside of [ 95.890755] freed 1024-byte region [ffff88800c388000, ffff88800c388400) [ 95.890755] [ 95.890755] The buggy address belongs to the physical page: [ 95.890755] page: refcount:1 mapcount:0 mapping:0000000000000000 index:0xffff88800c38a800 pfn:0xc388 [ 95.890755] head: order:3 entire_mapcount:0 nr_pages_mapped:0 pincount:0 [ 95.890755] ano ---truncated---

Affected

Our own answer: ranges merged, affected separated from platform-only, with confidence and review flags.

v ≥ 4.14.263v ≥ 5.13.19v ≥ 5.14.64.14.263 ≤ v < 4.154.19.207 ≤ v < 4.19.3145.10.67 ≤ v < 5.10.2175.13.19 ≤ v < 5.145.14.6 ≤ v < 5.155.14.6 ≤ v < 5.15.1595.15 ≤ v < 5.15.1595.15 ≤ v < 6.1.915.15 ≤ v < 6.6.315.15 ≤ v < 6.8.105.15 ≤ v < 6.95.16 ≤ v < 6.1.915.4.148 ≤ v < 5.4.2766.2 ≤ v < 6.6.316.7 ≤ v < 6.8.1037d7ae2b0578f2373674a755402ee722e96edc084.14.2634.19.20748669c81a65628ef234cbdd91b9395952c7c27fe5.10.675.13.195.14.65.4.1486.9 rc16.9 rc26.9 rc36.9 rc46.9 rc56.9 rc66.9 rc7a1073aad497d0d071a71f61b721966a176d50c08b657bba82ff6a007d84fd076bd73b11131726a2bba316be1b6a00db7126ed9a39f9bee434a508043ec1f74319bb35c1c90c25014ec0f6ea6c3ca2134fea63ccd928c01573306983346588b26cffb5572
Vendor states this is fixed in 012363cb1bec5f33a7b94629ab2c1086f30280f2 (fixed)
Vendor states this is fixed in 1b33d55fb7355e27f8c82cd4ecd560f162469249 (fixed)
Vendor states this is fixed in 3212afd00e3cda790fd0583cb3eaef8f9575a014 (fixed)
Vendor states this is fixed in 33a6e92161a78c1073d90e27abe28d746feb0a53 (fixed)
Vendor states this is fixed in 483bc08181827fc475643272ffb69c533007e546 (fixed)
Vendor states this is fixed in 50c2037fc28df870ef29d9728c770c8955d32178 (fixed)
Vendor states this is fixed in 6a18eeb1b3bbc67c20d9609c31dca6a69b4bcde5 (fixed)
Vendor states this is fixed in bfab2c1f7940a232cd519e82fff137e308abfd93 (fixed)
Affected range stops below 4.15, so it looks safe — our inference, not a vendor statement
Vendor states this is fixed in 4.19.314 (unaffected)
Vendor states this is fixed in 5.10.217 (unaffected)
Affected range stops below 5.14, so it looks safe — our inference, not a vendor statement
Vendor states this is fixed in 5.15 (unaffected)
Vendor states this is fixed in 5.15.159 (unaffected)
Vendor states this is fixed in 5.4.276 (unaffected)
Vendor states this is fixed in 6.1.91 (unaffected)
Vendor states this is fixed in 6.6.31 (unaffected)
Vendor states this is fixed in 6.8.10 (unaffected)
Vendor states this is fixed in 6.9 (unaffected)

References (16)

Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/012363cb1bec5f33a7b94629ab2c1086f30280f2
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/1b33d55fb7355e27f8c82cd4ecd560f162469249
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/3212afd00e3cda790fd0583cb3eaef8f9575a014
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/33a6e92161a78c1073d90e27abe28d746feb0a53
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/483bc08181827fc475643272ffb69c533007e546
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/50c2037fc28df870ef29d9728c770c8955d32178
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/6a18eeb1b3bbc67c20d9609c31dca6a69b4bcde5
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/bfab2c1f7940a232cd519e82fff137e308abfd93

SSVC — Action Prioritization

SSVCNo known exploitNot automatablePartial impact

SSVC signals action urgency (what to patch first), separate from CVSS which measures severity.

CVSS

Attack Vector
LOCAL
Complexity
LOW
Privileges
LOW
User Interaction
NONE
Scope
UNCHANGED
Confidentiality
HIGH
Integrity
HIGH
Availability
HIGH
Vector?

Quick Info

StatusMODIFIED
CWE
CWE-416

Get alerted

Stop reading CVE feeds looking for your own stack

Track the products you run and VulnTracker tells you when a new CVE affects them — with what is known about fixing it, and nothing about the rest.

Free plan, no card