Description
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]
Affected products
| Vendor | Product | Affected | Fixed |
|---|---|---|---|
| Linux | Linux | 5.11 | 6.12.12 |
Fixed in Linux distributions
Distributions backport fixes, so the version that fixes this vulnerability differs per release — upgrade to at least the version shown. From the distributions' security trackers and advisories.
Debian
Security tracker ↗| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Debian 14 | linux | 6.12.12-1 | — |
| Debian 13 | linux | 6.12.12-1 | — |
| Debian 12 | linux | No fix yet | — |
Ubuntu
Security tracker ↗| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Ubuntu Nvidia-BlueField 24.04 LTS | linux-bluefield | No fix yet | — |
| Ubuntu Nvidia-BlueField 22.04 LTS | linux-bluefield | No fix yet | — |
| Ubuntu 24.04 LTS | linux +20 | No fix yet | — |
| Ubuntu 24.04 LTS | linux-gcp-6.11 +1 | 6.11.0-1013.13~24.04.1 | USN-7448-1 |
| Ubuntu 24.04 LTS | linux-hwe-6.11 | 6.11.0-24.24~24.04.1 | USN-7445-1 |
| Ubuntu 24.04 LTS | linux-lowlatency-hwe-6.11 | 6.11.0-1012.13~24.04.1 | USN-7445-1 |
| Ubuntu 24.04 LTS | linux-nvidia-6.11 | 6.11.0-1007.7 | — |
| Ubuntu 24.04 LTS | linux-nvidia-tegra | 6.8.0-1035.38 | USN-8781-1 |
| Ubuntu 24.04 LTS | linux-oem-6.11 | 6.11.0-1020.20 | USN-7445-1 |
| Ubuntu 22.04 LTS | linux +59 | No fix yet | — |
| Ubuntu 20.04 LTS | linux-gke +28 | No fix yet | — |
Show 8 more (older releases, extended support, other products)Fewer releases
| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Ubuntu 18.04 LTS | linux-gcp +14 | No fix yet | — |
| Ubuntu 16.04 LTS | linux-hwe-edge | No fix yet | — |
| Ubuntu Pro Realtime 24.04 LTS | linux-realtime +1 | No fix yet | — |
| Ubuntu Pro Realtime 22.04 LTS | linux-realtime +2 | No fix yet | — |
| Ubuntu Pro FIPS-updates 24.04 LTS | linux-fips +3 | No fix yet | — |
| Ubuntu Pro FIPS-updates 22.04 LTS | linux-fips +3 | No fix yet | — |
| Ubuntu Pro FIPS-preview 22.04 LTS | linux-fips +3 | No fix yet | — |
| Ubuntu Pro 20.04 LTS | linux-aws-5.15 +10 | No fix yet | — |
Red Hat
Security tracker ↗| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| RHEL 10 | rv +76 | 6.12.0-124.8.1.el10_1 | RHSA-2025:20095 |
| RHEL 9 | rv +75 | 5.14.0-611.5.1.el9_7 | RHSA-2025:20518 |
AlmaLinux
Errata ↗| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| AlmaLinux 10 | rv +74 | 6.12.0-124.8.1.el10_1 | ALSA-2025:20095 |
| AlmaLinux 9 | rv +73 | 5.14.0-611.5.1.el9_7 | ALSA-2025:20518 |
Rocky Linux
Errata ↗| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Rocky Linux 10 | kernel | 6.12.0-124.8.1.el10_1 | RLSA-2025:20095 |
| Rocky Linux 9 | kernel | 5.14.0-611.5.1.el9_7 | RLSA-2025:20518 |
SUSE
Security tracker ↗| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| SLES 15 SP7 | kernel-azure +2 | 6.4.0-150700.20.3.1 | SUSE-SU-2025:01967-1 |
| SLES 15 SP6 | kernel-64kb +3 | 6.4.0-150600.23.47.2 | SUSE-SU-2025:1180-1 |
| SLES 15 SP6 | kernel-azure +1 | 6.4.0-150600.8.34.2 | SUSE-SU-2025:1177-1 |
| SLES 15 SP6 | kernel-coco +3 | 6.4.0-15061.21.coco15sp6.1 | SUSE-SU-2025:01919-1 |
| SLES 15 SP6 | kernel-default-base | 6.4.0-150600.23.47.2.150600.12.20.2 | SUSE-SU-2025:1180-1 |
| SLES 15 SP6 | kernel-docs +2 | 6.4.0-150600.23.47.1 | SUSE-SU-2025:1180-1 |
| SLES 15 SP6 | kernel-syms-azure | 6.4.0-150600.8.34.1 | SUSE-SU-2025:1177-1 |
| SLES 15 SP5 | kernel-64kb +6 | 5.14.21-150500.55.100.1 | SUSE-SU-2025:1241-1 |
| SLES 15 SP5 | kernel-default-base | 5.14.21-150500.55.100.1.150500.6.47.1 | SUSE-SU-2025:1241-1 |
| SLES 15 SP4 | kernel-64kb +6 | 5.14.21-150400.24.161.1 | SUSE-SU-2025:1195-1 |
| SLES 15 SP4 | kernel-default-base | 5.14.21-150400.24.161.1.150400.24.80.1 | SUSE-SU-2025:1195-1 |
Show 15 more (older releases, extended support, other products)Fewer releases
| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| SLES for SAP 15 SP5 | kernel-default-base | 5.14.21-150500.55.100.1.150500.6.47.1 | SUSE-SU-2025:1241-1 |
| SLES for SAP 15 SP5 | kernel-docs +4 | 5.14.21-150500.55.100.1 | SUSE-SU-2025:1241-1 |
| SLES for SAP 15 SP4 | kernel-default-base | 5.14.21-150400.24.161.1.150400.24.80.1 | SUSE-SU-2025:1195-1 |
| SLES for SAP 15 SP4 | kernel-docs +4 | 5.14.21-150400.24.161.1 | SUSE-SU-2025:1195-1 |
| SLE Micro 6.1 | kernel-default-base | 6.4.0-28.1.21.6 | SUSE-SU-2025:20270-1 |
| SLE Micro 6.1 | kernel-livepatch-MICRO-6-0_Update_6 +1 | 1-3.1 | SUSE-SU-2025:20270-1, SUSE-SU-2025:20260-1 |
| SLE Micro 6.1 | kernel-rt +4 | 6.4.0-28.1 | SUSE-SU-2025:20270-1, SUSE-SU-2025:20260-1 |
| SLE Micro 6.0 | kernel-default-base | 6.4.0-28.1.21.6 | SUSE-SU-2025:20192-1 |
| SLE Micro 6.0 | kernel-livepatch-MICRO-6-0_Update_6 +1 | 1-3.1 | SUSE-SU-2025:20192-1, SUSE-SU-2025:20190-1 |
| SLE Micro 6.0 | kernel-rt +4 | 6.4.0-28.1 | SUSE-SU-2025:20192-1, SUSE-SU-2025:20190-1 |
| SLE Micro 5.5 | kernel-default-base | 5.14.21-150500.55.100.1.150500.6.47.1 | SUSE-SU-2025:1241-1 |
| SLE Micro 5.5 | kernel-rt +1 | 5.14.21-150500.13.91.1 | SUSE-SU-2025:1176-1 |
| SLE Micro 5.5 | kernel-source +1 | 5.14.21-150500.55.100.1 | SUSE-SU-2025:1241-1 |
| SLE Micro 5.4 | kernel-default | 5.14.21-150400.24.161.1 | SUSE-SU-2025:1195-1 |
| SLE Micro 5.4 | kernel-default-base | 5.14.21-150400.24.161.1.150400.24.80.1 | SUSE-SU-2025:1195-1 |
| SLE Micro 5.4 | kernel-rt +1 | 5.14.21-150400.15.115.1 | SUSE-SU-2025:1183-1 |
| SLE Micro 5.3 | kernel-default | 5.14.21-150400.24.161.1 | SUSE-SU-2025:1195-1 |
| SLE Micro 5.3 | kernel-default-base | 5.14.21-150400.24.161.1.150400.24.80.1 | SUSE-SU-2025:1195-1 |
| SLE Micro 5.3 | kernel-rt +1 | 5.14.21-150400.15.115.1 | SUSE-SU-2025:1183-1 |
| SLE Live Patching 15 SP6 | kernel-default | 6.4.0-150600.23.47.2 | SUSE-SU-2025:1180-1 |
| SLE Live Patching 15 SP6 | kernel-livepatch-SLE15-SP6-RT_Update_10 | 1-150600.1.5.1 | SUSE-SU-2025:1178-1 |
| SLE Live Patching 15 SP6 | kernel-livepatch-SLE15-SP6_Update_10 | 1-150600.13.5.1 | SUSE-SU-2025:1180-1 |
| SLE Live Patching 15 SP5 | kernel-default | 5.14.21-150500.55.100.1 | SUSE-SU-2025:1241-1 |
| SLE Live Patching 15 SP5 | kernel-livepatch-SLE15-SP5_Update_25 | 1-150500.11.3.1 | SUSE-SU-2025:1241-1 |
| SLE Live Patching 15 SP4 | kernel-default | 5.14.21-150400.24.161.1 | SUSE-SU-2025:1195-1 |
| SLE Live Patching 15 SP4 | kernel-livepatch-SLE15-SP4_Update_39 | 1-150400.9.3.1 | SUSE-SU-2025:1195-1 |
| SLE HPC 15 SP5 | kernel-64kb +5 | 5.14.21-150500.55.100.1 | SUSE-SU-2025:1241-1 |
| SLE HPC 15 SP5 | kernel-default-base | 5.14.21-150500.55.100.1.150500.6.47.1 | SUSE-SU-2025:1241-1 |
| SLE HPC 15 SP4 | kernel-64kb +5 | 5.14.21-150400.24.161.1 | SUSE-SU-2025:1195-1 |
| SLE HPC 15 SP4 | kernel-default-base | 5.14.21-150400.24.161.1.150400.24.80.1 | SUSE-SU-2025:1195-1 |
| SUSE Real Time Module 15 SP6 | kernel-rt +3 | 6.4.0-150600.10.34.1 | SUSE-SU-2025:1178-1 |
| SUSE Manager Server 4.3 | kernel-default-base | 5.14.21-150400.24.161.1.150400.24.80.1 | SUSE-SU-2025:1195-1 |
| SUSE Manager Server 4.3 | kernel-syms +3 | 5.14.21-150400.24.161.1 | SUSE-SU-2025:1195-1 |
| SUSE Manager Proxy 4.3 | kernel-default-base | 5.14.21-150400.24.161.1.150400.24.80.1 | SUSE-SU-2025:1195-1 |
| SUSE Manager Proxy 4.3 | kernel-syms +2 | 5.14.21-150400.24.161.1 | SUSE-SU-2025:1195-1 |
openSUSE
Security tracker ↗| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| openSUSE Leap 15.6 | dtb-aarch64 +4 | 6.4.0-150600.23.47.1 | SUSE-SU-2025:1180-1 |
| openSUSE Leap 15.6 | kernel-64kb +5 | 6.4.0-150600.23.47.2 | SUSE-SU-2025:1180-1 |
| openSUSE Leap 15.6 | kernel-azure +1 | 6.4.0-150600.8.34.2 | SUSE-SU-2025:1177-1 |
| openSUSE Leap 15.6 | kernel-default-base | 6.4.0-150600.23.47.2.150600.12.20.2 | SUSE-SU-2025:1180-1 |
| openSUSE Leap 15.6 | kernel-rt +3 | 6.4.0-150600.10.34.1 | SUSE-SU-2025:1178-1 |
| openSUSE Leap 15.6 | kernel-syms-azure | 6.4.0-150600.8.34.1 | SUSE-SU-2025:1177-1 |
Azure Linux
| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Azure Linux 3 | kernel | No fix yet | — |
| Azure Linux 2 (CBL-Mariner) | kernel | No fix yet | — |
Oracle Linux
| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Oracle Linux 9 | kernel-uek +34 | 6.12.0-101.33.4.3.el10uek | ELSA-2025-20530, ELSA-2025-20480 |
Advisories 27
- RHSA-2025:20518 Red Hat Security Advisory: kernel security update Red Hat Security Advisories (RHSA) · Nov 13, 2026
- RHSA-2025:20095 Red Hat Security Advisory: kernel security update Red Hat Security Advisories (RHSA) · Nov 13, 2026
- WID-SEC-2025-0309 Linux Kernel: Mehrere Schwachstellen BSI CERT-Bund (WID) · Nov 10, 2026
- USN-8781-1 linux-nvidia-tegra vulnerabilities Ubuntu Security Notices (USN) · Nov 9, 2026
- USN-7445-1 linux, linux-aws, linux-gcp, linux-hwe-6.11, linux-lowlatency, linux-lowlatency-hwe-6.11, linux-oem-6.11, linux-oracle, linux-raspi, linux-realtime vulnerabilities Ubuntu Security Notices (USN) · Oct 30, 2026
- USN-7448-1 linux-azure, linux-azure-6.11 vulnerabilities Ubuntu Security Notices (USN) · Oct 30, 2026
- ALSA-2025:20095 Moderate: kernel security update AlmaLinux Security Advisories · Oct 29, 2026
- ALSA-2025:20518 Moderate: kernel security update AlmaLinux Security Advisories · Oct 29, 2026
- WID-SEC-2025-1439 Dell Secure Connect Gateway: Mehrere Schwachstellen ermöglichen nicht spezifizierten Angriff BSI CERT-Bund (WID) · Oct 11, 2026
- WID-SEC-2026-2253 IBM Security Verify Access: Mehrere Schwachstellen BSI CERT-Bund (WID) · Sep 17, 2026
- SUSE-SU-2025:20270-1 Security update for the Linux Kernel SUSE / openSUSE Security Updates · Mar 23, 2026
- SUSE-SU-2025:20192-1 Security update for the Linux Kernel SUSE / openSUSE Security Updates · Mar 23, 2026
- SUSE-SU-2025:20260-1 Security update for the Linux Kernel SUSE / openSUSE Security Updates · Mar 23, 2026
- SUSE-SU-2025:20190-1 Security update for the Linux Kernel SUSE / openSUSE Security Updates · Mar 23, 2026
- SUSE-SU-2025:01967-1 Security update for the Linux Kernel SUSE / openSUSE Security Updates · Feb 4, 2026
- SUSE-SU-2025:01919-1 Security update for the Linux Kernel SUSE / openSUSE Security Updates · Feb 4, 2026
- SUSE-SU-2025:1177-1 Security update for the Linux Kernel SUSE / openSUSE Security Updates · Feb 4, 2026
- SUSE-SU-2025:1180-1 Security update for the Linux Kernel SUSE / openSUSE Security Updates · Feb 4, 2026
- SUSE-SU-2025:1176-1 Security update for the Linux Kernel SUSE / openSUSE Security Updates · Feb 4, 2026
- SUSE-SU-2025:1241-1 Security update for the Linux Kernel SUSE / openSUSE Security Updates · Feb 4, 2026
- SUSE-SU-2025:1178-1 Security update for the Linux Kernel SUSE / openSUSE Security Updates · Feb 4, 2026
- SUSE-SU-2025:1183-1 Security update for the Linux Kernel SUSE / openSUSE Security Updates · Feb 4, 2026
- SUSE-SU-2025:1195-1 Security update for the Linux Kernel SUSE / openSUSE Security Updates · Feb 4, 2026
- RLSA-2025:20095 Moderate: kernel security update Rocky Linux Security Advisories · Nov 27, 2025
- RLSA-2025:20518 Moderate: kernel security update Rocky Linux Security Advisories · Nov 21, 2025
- ELSA-2025-20530 Important: Unbreakable Enterprise kernel security update (Oracle Linux 9) Oracle Linux Security Advisories (ELSA) · Aug 18, 2025
- ELSA-2025-20480 Important: Unbreakable Enterprise kernel security update (Oracle Linux 9) Oracle Linux Security Advisories (ELSA) · Jul 17, 2025