In the Linux kernel, the following vulnerability has been resolved:
mm: zswap: fix crypto_free_acomp() deadlock in zswap_cpu_comp_dead()
Currently, zswap_cpu_comp_dead() calls crypto_free_acomp() while holding the per-CPU acomp_ctx mutex. crypto_free_acomp() then holds scomp_lock (through crypto_exit_scomp_ops_async()).
On the other hand, crypto_alloc_acomp_node() holds the scomp_lock (through crypto_scomp_init_tfm()), and then allocates memory. If the allocation results in reclaim, we may attempt to hold the per-CPU acomp_ctx mutex.
The above dependencies can cause an ABBA deadlock. For example in the following scenario:
(1) Task A running on CPU #1: crypto_alloc_acomp_node() Holds scomp_lock Enters reclaim Reads per_cpu_ptr(pool->acomp_ctx, 1)
(2) Task A is descheduled
(3) CPU #1 goes offline zswap_cpu_comp_dead(CPU #1) Holds per_cpu_ptr(pool->acomp_ctx, 1)) Calls crypto_free_acomp() Waits for scomp_lock
(4) Task A running on CPU #2: Waits for per_cpu_ptr(pool->acomp_ctx, 1) // Read on CPU #1 DEADLOCK
Since there is no requirement to call crypto_free_acomp() with the per-CPU acomp_ctx mutex held in zswap_cpu_comp_dead(), move it after the mutex is unlocked. Also move the acomp_request_free() and kfree() calls for consistency and to avoid any potential sublte locking dependencies in the future.
With this, only setting acomp_ctx fields to NULL occurs with the mutex held. This is similar to how zswap_cpu_comp_prepare() only initializes acomp_ctx fields with the mutex held, after performing all allocations before holding the mutex.
Opportunistically, move the NULL check on acomp_ctx so that it takes place before the mutex dereference.
CVSS Details
- CVSS 3.1 Base Score: 5.5
- CVSS 3.1 Vector: (CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H)
Covered by Rapid7
| Product | Vendor Advisory | Solution File | Added | Published |
|---|---|---|---|---|
| Amazon_linux_2023 | — | Upgrade kernel-libbpf-develUpgrade kernel6.12-modules-extraUpgrade kernel-tools-develUpgrade kernel6.12-debuginfo-common-aarch64Upgrade kernel-livepatch-6.12.23-29.97Upgrade python3-perf6.12-debuginfoUpgrade kernel-modules-extra-commonUpgrade kernel-develUpgrade perf6.12-debuginfoUpgrade kernel6.12-debuginfoUpgrade python3-perf6.12Upgrade kernel6.12Upgrade kernel-headersUpgrade bpftoolUpgrade perf6.12Upgrade kernel-libbpf-debuginfoUpgrade bpftool-debuginfoUpgrade kernel-toolsUpgrade kernel6.12-debuginfo-common-x86_64Upgrade kernel-libbpfUpgrade kernel-libbpf-staticUpgrade kernel-tools-debuginfo | Jun 24, 2025 | Apr 16, 2025 |
| Debian | — | Upgrade linux | Jul 23, 2026 | Jul 23, 2026 |
| Huawei Euleros 2_0_sp13 | — | Upgrade kernel-tools-libsUpgrade kernel-abi-stablelistsUpgrade bpftoolUpgrade kernel-toolsUpgrade python3-perfUpgrade kernel | Mar 10, 2026 | Mar 10, 2026 |
| Redhat_linux | — | No solution exists | Jul 9, 2025 | Apr 16, 2025 |
| Suse | — | Upgrade kernel-64kbUpgrade kernel-debugUpgrade kernel-symsUpgrade dtb-lgUpgrade dtb-socionextUpgrade kernel-develUpgrade dtb-hisiliconUpgrade dtb-alteraUpgrade gfs2-kmp-64kbUpgrade kernel-devel-rtUpgrade ocfs2-kmp-defaultUpgrade dtb-xilinxUpgrade dtb-amazonUpgrade kernel-obs-qaUpgrade ocfs2-kmp-azureUpgrade dtb-apmUpgrade gfs2-kmp-azureUpgrade kernel-source-azureUpgrade kernel-default-develUpgrade dtb-mediatekUpgrade kernel-debug-develUpgrade kernel-default-livepatch-develUpgrade gfs2-kmp-defaultUpgrade kernel-kvmsmall-develUpgrade dtb-allwinnerUpgrade kernel-zfcpdumpUpgrade kselftests-kmp-defaultUpgrade ocfs2-kmp-rtUpgrade reiserfs-kmp-azureUpgrade dtb-armUpgrade kernel-default-vdsoUpgrade kernel-64kb-extraUpgrade kernel-azure-extraUpgrade dlm-kmp-defaultUpgrade cluster-md-kmp-rtUpgrade kernel-64kb-develUpgrade kernel-64kb-optionalUpgrade dlm-kmp-azureUpgrade dtb-freescaleUpgrade dtb-renesasUpgrade reiserfs-kmp-rtUpgrade kernel-default-baseUpgrade cluster-md-kmp-azureUpgrade kernel-default-optionalUpgrade kernel-rt-develUpgrade reiserfs-kmp-defaultUpgrade kselftests-kmp-rtUpgrade gfs2-kmp-rtUpgrade dtb-appleUpgrade dtb-caviumUpgrade dtb-amdUpgrade kernel-rt_debug-vdsoUpgrade kernel-devel-azureUpgrade kernel-azure-develUpgrade kernel-azureUpgrade kernel-rt-vdsoUpgrade dtb-nvidiaUpgrade dtb-amlogicUpgrade kernel-sourceUpgrade kernel-obs-buildUpgrade kernel-macrosUpgrade kernel-kvmsmall-vdsoUpgrade kernel-default-livepatchUpgrade kernel-syms-azureUpgrade dtb-exynosUpgrade kernel-docsUpgrade kernel-rtUpgrade dtb-qcomUpgrade kernel-default-extraUpgrade dtb-rockchipUpgrade kselftests-kmp-azureUpgrade kernel-docs-htmlUpgrade kernel-rt-livepatch-develUpgrade kernel-kvmsmallUpgrade dtb-broadcomUpgrade reiserfs-kmp-64kbUpgrade kselftests-kmp-64kbUpgrade kernel-rt_debugUpgrade kernel-rt-extraUpgrade dtb-marvellUpgrade cluster-md-kmp-64kbUpgrade kernel-debug-vdsoUpgrade dlm-kmp-rtUpgrade kernel-source-rtUpgrade kernel-defaultUpgrade kernel-azure-optionalUpgrade cluster-md-kmp-defaultUpgrade dtb-sprdUpgrade kernel-default-base-rebuildUpgrade dlm-kmp-64kbUpgrade kernel-syms-rtUpgrade kernel-source-vanillaUpgrade kernel-azure-vdsoUpgrade kernel-rt-optionalUpgrade ocfs2-kmp-64kbUpgrade kernel-rt_debug-devel | Dec 5, 2025 | Jun 12, 2025 |
| Ubuntu | — | Upgrade linux-image-6.11.0-1014-raspiUpgrade linux-image-lowlatency-64k-6.11Upgrade linux-image-6.14.0-1008-gcp-64kUpgrade linux-image-6.14.0-1007-azureUpgrade linux-image-6.14.0-22-generic-64kUpgrade linux-image-gcp-64kUpgrade linux-image-6.11.0-1015-awsUpgrade linux-image-6.11.0-1024-oemUpgrade linux-image-6.11.0-1017-oracle-64kUpgrade linux-image-generic-64kUpgrade linux-image-azure-fdeUpgrade linux-image-genericUpgrade linux-image-raspiUpgrade linux-image-6.11.0-1017-oracleUpgrade linux-image-6.14.0-22-genericUpgrade linux-image-lowlatency-64kUpgrade linux-image-6.14.0-1008-gcpUpgrade linux-image-6.11.0-1016-gcpUpgrade linux-image-6.14.0-1007-aws-64kUpgrade linux-image-awsUpgrade linux-image-azureUpgrade linux-image-generic-64k-hwe-24.04Upgrade linux-image-6.14.0-1007-awsUpgrade linux-image-6.14.0-1007-oracle-64kUpgrade linux-image-6.14.0-1007-raspiUpgrade linux-image-oem-24.04bUpgrade linux-image-6.11.0-28-genericUpgrade linux-image-realtimeUpgrade linux-image-oracle-64kUpgrade linux-image-6.11.0-28-generic-64kUpgrade linux-image-6.11.0-1018-azureUpgrade linux-image-6.14.0-1007-oracleUpgrade linux-image-6.14.0-1007-azure-fdeUpgrade linux-image-azure-fde-6.11Upgrade linux-image-6.11.0-1015-lowlatency-64kUpgrade linux-image-generic-hwe-24.04Upgrade linux-image-azure-fde-edgeUpgrade linux-image-6.11.0-1016-gcp-64kUpgrade linux-image-azure-6.11Upgrade linux-image-gcpUpgrade linux-image-oracleUpgrade linux-image-lowlatency-6.11Upgrade linux-image-6.11.0-1015-lowlatencyUpgrade linux-image-virtualUpgrade linux-image-virtual-hwe-24.04Upgrade linux-image-6.11.0-1011-realtimeUpgrade linux-image-6.14.0-1004-realtimeUpgrade linux-image-6.11.0-1018-azure-fdeUpgrade linux-image-lowlatency-64k-hwe-24.04Upgrade linux-image-lowlatency-hwe-24.04Upgrade linux-image-lowlatencyUpgrade linux-image-aws-64k | Jun 26, 2025 | Apr 16, 2025 |
Prioritise with Active Threat Intelligence
With curated Threat Intelligence, you can see which vulnerabilities truly put you at risk, prioritize what matters most, and act before attackers do.
Explore Intelligence Hub