Linux: Use After Free
CVE-2026-31587 is a high-severity use after free vulnerability in Linux, with a CVSS 3.1 base score of 7.8 out of 10. It can be exploited with local access to the system by an attacker with a low-privileged account, without any action from a user. The record lists versions 110769a9aa51135ac7ce479a47dfb41924f37664, 887632163b546a8944b46ef465f1d74e838b727a, b7412ed789ffb1e59c8d6f5ab6a6a718963c85e2 as the first without the flaw, so updating Linux to one of those releases or later removes the exposure. There is no confirmed exploitation so far. EPSS estimates a 0.13% chance of exploitation within 30 days, which is low compared with other CVEs.
High severity with no evidence of exploitation so far.
What to do
- Update Linux to 110769a9aa51135ac7ce479a47dfb41924f37664 or 887632163b546a8944b46ef465f1d74e838b727a or b7412ed789ffb1e59c8d6f5ab6a6a718963c85e2 or 30383b7780ffa140bc124de5b66cae7c84133dbb, whichever matches your release line, or a later version.
- Update Linux Kernel to 6.6.136 or 6.12.83 or 6.18.24 or 6.19.14, whichever matches your release line, or a later version.
Affected products and versions
| Vendor | Product | Affected versions | Fixed in |
|---|---|---|---|
| Linux | Linux | 5477518b8a0e8a45239646acd80c9bafc4401522 up to, but not including, 110769a9aa51135ac7ce479a47dfb41924f37664; 5477518b8a0e8a45239646acd80c9bafc4401522 up to, but not including, 887632163b546a8944b46ef465f1d74e838b727a; 5477518b8a0e8a45239646acd80c9bafc4401522 up to, but not including, b7412ed789ffb1e59c8d6f5ab6a6a718963c85e2; 5477518b8a0e8a45239646acd80c9bafc4401522 up to, but not including, 30383b7780ffa140bc124de5b66cae7c84133dbb; 5477518b8a0e8a45239646acd80c9bafc4401522 up to, but not including, f7b790531cdad3b2075ab937aa06d7b802403be4; 5477518b8a0e8a45239646acd80c9bafc4401522 up to, but not including, a561a55b79a9c55f0443377f2d4dcf6149d057af; 5477518b8a0e8a45239646acd80c9bafc4401522 up to, but not including, 6ec1235fc941dac6c011b30ee01d9220ff87e0cd; 5.16 | 110769a9aa51135ac7ce479a47dfb41924f37664, 887632163b546a8944b46ef465f1d74e838b727a, b7412ed789ffb1e59c8d6f5ab6a6a718963c85e2, 30383b7780ffa140bc124de5b66cae7c84133dbb, f7b790531cdad3b2075ab937aa06d7b802403be4, a561a55b79a9c55f0443377f2d4dcf6149d057af |
| Linux | Linux Kernel | 5.16 up to, but not including, 6.6.136; 6.7 up to, but not including, 6.12.83; 6.13 up to, but not including, 6.18.24; 6.19 up to, but not including, 6.19.14; 7.0 up to, but not including, 7.0.1 | 6.6.136, 6.12.83, 6.18.24, 6.19.14, 7.0.1 |
Version data comes from the organisation that assigned the CVE. Confirm against the vendor advisory before deciding you are unaffected.
How the severity score breaks down
- Attack vector
- LocalThe attacker needs local access or must trick a user into running something.
- Attack complexity
- LowNo special conditions are needed; the attack works reliably.
- Privileges required
- LowA basic user account is enough.
- User interaction
- NoneNo action by a victim is required.
- Scope
- UnchangedImpact stays within the vulnerable component.
- Confidentiality
- HighAll data handled by the component can be read.
- Integrity
- HighData or code can be modified at will.
- Availability
- HighThe component can be taken down completely.
Vector: CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H. Scored by CNA.
Official description
In the Linux kernel, the following vulnerability has been resolved: ASoC: qcom: q6apm: move component registration to unmanaged version q6apm component registers dais dynamically from ASoC toplology, which are allocated using device managed version apis. Allocating both component and dynamic dais using managed version could lead to incorrect free ordering, dai will be freed while component still holding references to it. Fix this issue by moving component to unmanged version so that the dai pointers are only freeded after the component is removed. ================================================================== BUG: KASAN: slab-use-after-free in snd_soc_del_component_unlocked+0x3d4/0x400 [snd_soc_core] Read of size 8 at addr ffff00084493a6e8 by task kworker/u48:0/3426 Tainted: [W]=WARN Hardware name: LENOVO 21N2ZC5PUS/21N2ZC5PUS, BIOS N42ET57W (1.31 ) 08/08/2024 Workqueue: pdr_notifier_wq pdr_notifier_work [pdr_interface] Call trace: show_stack+0x28/0x7c (C) dump_stack_lvl+0x60/0x80 print_report+0x160/0x4b4 kasan_report+0xac/0xfc __asan_report_load8_noabort+0x20/0x34 snd_soc_del_component_unlocked+0x3d4/0x400 [snd_soc_core] snd_soc_unregister_component_by_driver+0x50/0x88 [snd_soc_core] devm_component_release+0x30/0x5c [snd_soc_core] devres_release_all+0x13c/0x210 device_unbind_cleanup+0x20/0x190 device_release_driver_internal+0x350/0x468 device_release_driver+0x18/0x30 bus_remove_device+0x1a0/0x35c device_del+0x314/0x7f0 device_unregister+0x20/0xbc apr_remove_device+0x5c/0x7c [apr] device_for_each_child+0xd8/0x160 apr_pd_status+0x7c/0xa8 [apr] pdr_notifier_work+0x114/0x240 [pdr_interface] process_one_work+0x500/0xb70 worker_thread+0x630/0xfb0 kthread+0x370/0x6c0 ret_from_fork+0x10/0x20 Allocated by task 77: kasan_save_stack+0x40/0x68 kasan_save_track+0x20/0x40 kasan_save_alloc_info+0x44/0x58 __kasan_kmalloc+0xbc/0xdc __kmalloc_node_track_caller_noprof+0x1f4/0x620 devm_kmalloc+0x7c/0x1c8 snd_soc_register_dai+0x50/0x4f0 [snd_soc_core] soc_tplg_pcm_elems_load+0x55c/0x1eb8 [snd_soc_core] snd_soc_tplg_component_load+0x4f8/0xb60 [snd_soc_core] audioreach_tplg_init+0x124/0x1fc [snd_q6apm] q6apm_audio_probe+0x10/0x1c [snd_q6apm] snd_soc_component_probe+0x5c/0x118 [snd_soc_core] soc_probe_component+0x44c/0xaf0 [snd_soc_core] snd_soc_bind_card+0xad0/0x2370 [snd_soc_core] snd_soc_register_card+0x3b0/0x4c0 [snd_soc_core] devm_snd_soc_register_card+0x50/0xc8 [snd_soc_core] x1e80100_platform_probe+0x208/0x368 [snd_soc_x1e80100] platform_probe+0xc0/0x188 really_probe+0x188/0x804 __driver_probe_device+0x158/0x358 driver_probe_device+0x60/0x190 __device_attach_driver+0x16c/0x2a8 bus_for_each_drv+0x100/0x194 __device_attach+0x174/0x380 device_initial_probe+0x14/0x20 bus_probe_device+0x124/0x154 deferred_probe_work_func+0x140/0x220 process_one_work+0x500/0xb70 worker_thread+0x630/0xfb0 kthread+0x370/0x6c0 ret_from_fork+0x10/0x20 Freed by task 3426: kasan_save_stack+0x40/0x68 kasan_save_track+0x20/0x40 __kasan_save_free_info+0x4c/0x80 __kasan_slab_free+0x78/0xa0 kfree+0x100/0x4a4 devres_release_all+0x144/0x210 device_unbind_cleanup+0x20/0x190 device_release_driver_internal+0x350/0x468 device_release_driver+0x18/0x30 bus_remove_device+0x1a0/0x35c device_del+0x314/0x7f0 device_unregister+0x20/0xbc apr_remove_device+0x5c/0x7c [apr] device_for_each_child+0xd8/0x160 apr_pd_status+0x7c/0xa8 [apr] pdr_notifier_work+0x114/0x240 [pdr_interface] process_one_work+0x500/0xb70 worker_thread+0x630/0xfb0 kthread+0x370/0x6c0 ret_from_fork+0x10/0x20
Source: the CVE record as published by its numbering authority, via NVD and CVE.org.
The underlying weakness: Use After Free
The product reuses or references memory after it has been freed. At some point afterward, the memory may be allocated again and saved in another pointer, while the original pointer references a location somewhere within the new allocation. Any operations using the original pointer are no longer valid because the memory belongs to the code that operates on the new pointer.
How developers prevent this class of flaw
- Choose a language that provides automatic memory management.
- When freeing pointers, be sure to set them to NULL once they are freed. However, the utilization of multiple or complex data structures may lower the usefulness of this strategy.
Timeline
- CVE record published.
- Record last changed materially (score, affected products, status or references).
References
Patches and release notes
- git.kernel.org/stable/c/30383b7780ffa140bc124de5b66cae7c84133dbb
- git.kernel.org/stable/c/6ec1235fc941dac6c011b30ee01d9220ff87e0cd
- git.kernel.org/stable/c/887632163b546a8944b46ef465f1d74e838b727a
- git.kernel.org/stable/c/a561a55b79a9c55f0443377f2d4dcf6149d057af
- git.kernel.org/stable/c/b7412ed789ffb1e59c8d6f5ab6a6a718963c85e2
- git.kernel.org/stable/c/f7b790531cdad3b2075ab937aa06d7b802403be4
Other references
Recent Use After Free vulnerabilities
- 9.8 Critical severity
- 7.8 High severity
- 7.8 High severity
- 7.8 High severity
- 7.8 High severity
- 7.8 High severity
Spotted an error? Tell us.