CVE-2025-21693

EUVD-2025-2642
In the Linux kernel, the following vulnerability has been resolved:

mm: zswap: properly synchronize freeing resources during CPU hotunplug

In zswap_compress() and zswap_decompress(), the per-CPU acomp_ctx of the
current CPU at the beginning of the operation is retrieved and used
throughout.  However, since neither preemption nor migration are disabled,
it is possible that the operation continues on a different CPU.

If the original CPU is hotunplugged while the acomp_ctx is still in use,
we run into a UAF bug as some of the resources attached to the acomp_ctx
are freed during hotunplug in zswap_cpu_comp_dead() (i.e. 
acomp_ctx.buffer, acomp_ctx.req, or acomp_ctx.acomp).

The problem was introduced in commit 1ec3b5fe6eec ("mm/zswap: move to use
crypto_acomp API for hardware acceleration") when the switch to the
crypto_acomp API was made.  Prior to that, the per-CPU crypto_comp was
retrieved using get_cpu_ptr() which disables preemption and makes sure the
CPU cannot go away from under us.  Preemption cannot be disabled with the
crypto_acomp API as a sleepable context is needed.

Use the acomp_ctx.mutex to synchronize CPU hotplug callbacks allocating
and freeing resources with compression/decompression paths.  Make sure
that acomp_ctx.req is NULL when the resources are freed.  In the
compression/decompression paths, check if acomp_ctx.req is NULL after
acquiring the mutex (meaning the CPU was offlined) and retry on the new
CPU.

The initialization of acomp_ctx.mutex is moved from the CPU hotplug
callback to the pool initialization where it belongs (where the mutex is
allocated).  In addition to adding clarity, this makes sure that CPU
hotplug cannot reinitialize a mutex that is already locked by
compression/decompression.

Previously a fix was attempted by holding cpus_read_lock() [1].  This
would have caused a potential deadlock as it is possible for code already
holding the lock to fall into reclaim and enter zswap (causing a
deadlock).  A fix was also attempted using SRCU for synchronization, but
Johannes pointed out that synchronize_srcu() cannot be used in CPU hotplug
notifiers [2].

Alternative fixes that were considered/attempted and could have worked:
- Refcounting the per-CPU acomp_ctx. This involves complexity in
  handling the race between the refcount dropping to zero in
  zswap_[de]compress() and the refcount being re-initialized when the
  CPU is onlined.
- Disabling migration before getting the per-CPU acomp_ctx [3], but
  that's discouraged and is a much bigger hammer than needed, and could
  result in subtle performance issues.

[1]https://lkml.kernel.org/20241219212437.2714151-1-yosryahmed@google.com/
[2]https://lkml.kernel.org/20250107074724.1756696-2-yosryahmed@google.com/
[3]https://lkml.kernel.org/20250107222236.2715883-2-yosryahmed@google.com/

[yosryahmed@google.com: remove comment]
ProviderTypeBase ScoreAtk. VectorAtk. ComplexityPriv. RequiredVector
NISTPrimary
7.8 HIGH
LOCAL
LOW
LOW
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Base Score
CVSS 3.x
EPSS Score
Percentile: 6%
Affected Products (NVD)
VendorProductVersion
linuxlinux_kernel
5.11 ≤
𝑥
< 6.12.12
linuxlinux_kernel
6.13:rc1
linuxlinux_kernel
6.13:rc2
linuxlinux_kernel
6.13:rc3
linuxlinux_kernel
6.13:rc4
linuxlinux_kernel
6.13:rc5
linuxlinux_kernel
6.13:rc6
linuxlinux_kernel
6.13:rc7
𝑥
= Vulnerable software versions
Debian logo
Debian Releases
Debian Product
Codename
linux
bookworm
vulnerable
bookworm (security)
vulnerable
bullseye
5.10.223-1
fixed
bullseye (security)
5.10.251-5
fixed
forky
7.0.7-1
fixed
sid
7.0.7-1
fixed
trixie
6.12.86-1
fixed
trixie (security)
6.12.88-1
fixed
openSUSE logo
openSUSE / SLES Releases
openSUSE Product
Release
cluster-md-kmp-default
suse enterprise server 15 SP5
5.14.21-150500.55.100.1
fixed
dlm-kmp-default
suse enterprise server 15 SP5
5.14.21-150500.55.100.1
fixed
gfs2-kmp-default
suse enterprise server 15 SP5
5.14.21-150500.55.100.1
fixed
kernel-64kb
suse enterprise desktop 15 SP6
6.4.0-150600.23.47.2
fixed
suse enterprise desktop 15 SP7
6.4.0-150700.51.1
fixed
suse enterprise sap 15 SP6
6.4.0-150600.23.47.2
fixed
suse enterprise sap 15 SP7
6.4.0-150700.51.1
fixed
suse enterprise server 15 SP4
5.14.21-150400.24.161.1
fixed
suse enterprise server 15 SP5
5.14.21-150500.55.100.1
fixed
suse enterprise server 15 SP6
6.4.0-150600.23.47.2
fixed
suse enterprise server 15 SP7
6.4.0-150700.51.1
fixed
kernel-azure
suse enterprise sap 15 SP6
6.4.0-150600.8.34.2
fixed
suse enterprise sap 15 SP7
6.4.0-150700.20.3.1
fixed
suse enterprise server 15 SP6
6.4.0-150600.8.34.2
fixed
suse enterprise server 15 SP7
6.4.0-150700.20.3.1
fixed
kernel-default
suse enterprise desktop 15 SP6
6.4.0-150600.23.47.2
fixed
suse enterprise desktop 15 SP7
6.4.0-150700.51.1
fixed
suse enterprise sap 15 SP6
6.4.0-150600.23.47.2
fixed
suse enterprise sap 15 SP7
6.4.0-150700.51.1
fixed
suse enterprise server 15 SP4
5.14.21-150400.24.161.1
fixed
suse enterprise server 15 SP5
5.14.21-150500.55.100.1
fixed
suse enterprise server 15 SP6
6.4.0-150600.23.47.2
fixed
suse enterprise server 15 SP7
6.4.0-150700.51.1
fixed
kernel-default-base
suse enterprise desktop 15 SP6
6.4.0-150600.23.47.2.150600.12.20.2
fixed
suse enterprise sap 15 SP6
6.4.0-150600.23.47.2.150600.12.20.2
fixed
suse enterprise server 15 SP4
5.14.21-150400.24.161.1.150400.24.80.1
fixed
suse enterprise server 15 SP5
5.14.21-150500.55.100.1.150500.6.47.1
fixed
suse enterprise server 15 SP6
6.4.0-150600.23.47.2.150600.12.20.2
fixed
kernel-docs
suse enterprise desktop 15 SP6
6.4.0-150600.23.47.1
fixed
suse enterprise desktop 15 SP7
6.4.0-150700.51.2
fixed
suse enterprise sap 15 SP6
6.4.0-150600.23.47.1
fixed
suse enterprise sap 15 SP7
6.4.0-150700.51.2
fixed
suse enterprise server 15 SP4
5.14.21-150400.24.161.1
fixed
suse enterprise server 15 SP5
5.14.21-150500.55.100.1
fixed
suse enterprise server 15 SP6
6.4.0-150600.23.47.1
fixed
suse enterprise server 15 SP7
6.4.0-150700.51.2
fixed
kernel-macros
suse enterprise desktop 15 SP6
6.4.0-150600.23.47.2
fixed
suse enterprise desktop 15 SP7
6.4.0-150700.51.1
fixed
suse enterprise sap 15 SP6
6.4.0-150600.23.47.2
fixed
suse enterprise sap 15 SP7
6.4.0-150700.51.1
fixed
suse enterprise server 15 SP4
5.14.21-150400.24.161.1
fixed
suse enterprise server 15 SP5
5.14.21-150500.55.100.1
fixed
suse enterprise server 15 SP6
6.4.0-150600.23.47.2
fixed
suse enterprise server 15 SP7
6.4.0-150700.51.1
fixed
kernel-obs-build
suse enterprise desktop 15 SP6
6.4.0-150600.23.47.1
fixed
suse enterprise desktop 15 SP7
6.4.0-150700.51.2
fixed
suse enterprise sap 15 SP6
6.4.0-150600.23.47.1
fixed
suse enterprise sap 15 SP7
6.4.0-150700.51.2
fixed
suse enterprise server 15 SP4
5.14.21-150400.24.161.1
fixed
suse enterprise server 15 SP5
5.14.21-150500.55.100.1
fixed
suse enterprise server 15 SP6
6.4.0-150600.23.47.1
fixed
suse enterprise server 15 SP7
6.4.0-150700.51.2
fixed
kernel-source
suse enterprise desktop 15 SP6
6.4.0-150600.23.47.2
fixed
suse enterprise desktop 15 SP7
6.4.0-150700.51.1
fixed
suse enterprise sap 15 SP6
6.4.0-150600.23.47.2
fixed
suse enterprise sap 15 SP7
6.4.0-150700.51.1
fixed
suse enterprise server 15 SP4
5.14.21-150400.24.161.1
fixed
suse enterprise server 15 SP5
5.14.21-150500.55.100.1
fixed
suse enterprise server 15 SP6
6.4.0-150600.23.47.2
fixed
suse enterprise server 15 SP7
6.4.0-150700.51.1
fixed
kernel-source-azure
suse enterprise sap 15 SP6
6.4.0-150600.8.34.2
fixed
suse enterprise sap 15 SP7
6.4.0-150700.20.3.1
fixed
suse enterprise server 15 SP6
6.4.0-150600.8.34.2
fixed
suse enterprise server 15 SP7
6.4.0-150700.20.3.1
fixed
kernel-syms
suse enterprise desktop 15 SP6
6.4.0-150600.23.47.1
fixed
suse enterprise desktop 15 SP7
6.4.0-150700.51.1
fixed
suse enterprise sap 15 SP6
6.4.0-150600.23.47.1
fixed
suse enterprise sap 15 SP7
6.4.0-150700.51.1
fixed
suse enterprise server 15 SP4
5.14.21-150400.24.161.1
fixed
suse enterprise server 15 SP5
5.14.21-150500.55.100.1
fixed
suse enterprise server 15 SP6
6.4.0-150600.23.47.1
fixed
suse enterprise server 15 SP7
6.4.0-150700.51.1
fixed
kernel-syms-azure
suse enterprise sap 15 SP6
6.4.0-150600.8.34.1
fixed
suse enterprise sap 15 SP7
6.4.0-150700.20.3.1
fixed
suse enterprise server 15 SP6
6.4.0-150600.8.34.1
fixed
suse enterprise server 15 SP7
6.4.0-150700.20.3.1
fixed
kernel-zfcpdump
suse enterprise desktop 15 SP6
6.4.0-150600.23.47.2
fixed
suse enterprise desktop 15 SP7
6.4.0-150700.51.1
fixed
suse enterprise sap 15 SP6
6.4.0-150600.23.47.2
fixed
suse enterprise sap 15 SP7
6.4.0-150700.51.1
fixed
suse enterprise server 15 SP4
5.14.21-150400.24.161.1
fixed
suse enterprise server 15 SP5
5.14.21-150500.55.100.1
fixed
suse enterprise server 15 SP6
6.4.0-150600.23.47.2
fixed
suse enterprise server 15 SP7
6.4.0-150700.51.1
fixed
ocfs2-kmp-default
suse enterprise server 15 SP5
5.14.21-150500.55.100.1
fixed
reiserfs-kmp-default
suse enterprise server 15 SP4
5.14.21-150400.24.161.1
fixed
suse enterprise server 15 SP5
5.14.21-150500.55.100.1
fixed
Red Hat logo
Red Hat Enterprise Linux Releases
Red Hat Product
Release
kernel
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-64k
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-64k-core
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-64k-debug
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-64k-debug-core
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-64k-debug-devel
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-64k-debug-devel-matched
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-64k-debug-modules
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-64k-debug-modules-core
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-64k-debug-modules-extra
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-64k-devel
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-64k-devel-matched
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-64k-modules
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-64k-modules-core
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-64k-modules-extra
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-abi-stablelists
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-core
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-debug
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-debug-core
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-debug-devel
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-debug-devel-matched
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-debug-modules
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-debug-modules-core
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-debug-modules-extra
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-debug-uki-virt
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-devel
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-devel-matched
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-doc
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-modules
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-modules-core
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-modules-extra
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-rt
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-rt-64k
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-rt-64k-core
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-rt-64k-debug
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-rt-64k-debug-core
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-rt-64k-debug-devel
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-rt-64k-debug-modules
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-rt-64k-debug-modules-core
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-rt-64k-debug-modules-extra
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-rt-64k-devel
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-rt-64k-modules
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-rt-64k-modules-core
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-rt-64k-modules-extra
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-rt-core
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-rt-debug
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-rt-debug-core
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-rt-debug-devel
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-rt-debug-modules
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-rt-debug-modules-core
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-rt-debug-modules-extra
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-rt-devel
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-rt-modules
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-rt-modules-core
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-rt-modules-extra
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-tools
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-tools-libs
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-tools-libs-devel
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-uki-virt
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-uki-virt-addons
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-zfcpdump
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-zfcpdump-core
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-zfcpdump-devel
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-zfcpdump-devel-matched
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-zfcpdump-modules
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-zfcpdump-modules-core
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
kernel-zfcpdump-modules-extra
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
libperf
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
perf
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
python3-perf
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
rtla
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed
rv
RHEL 9
0:5.14.0-611.5.1.el9_7
fixed