In the Linux kernel, the following vulnerability has been resolved:
mm/page_alloc: prevent pcp corruption with SMP=n
The kernel test robot has reported:
BUG: spinlock trylock failure on UP on CPU#0, kcompactd0/28 lock: 0xffff888807e35ef0, .magic: dead4ead, .owner: kcompactd0/28, .owner_cpu: 0 CPU: 0 UID: 0 PID: 28 Comm: kcompactd0 Not tainted 6.18.0-rc5-00127-ga06157804399 #1 PREEMPT 8cc09ef94dcec767faa911515ce9e609c45db470 Call Trace: <IRQ> __dump_stack (lib/dump_stack.c:95) dump_stack_lvl (lib/dump_stack.c:123) dump_stack (lib/dump_stack.c:130) spin_dump (kernel/locking/spinlock_debug.c:71) do_raw_spin_trylock (kernel/locking/spinlock_debug.c:?) _raw_spin_trylock (include/linux/spinlock_api_smp.h:89 kernel/locking/spinlock.c:138) __free_frozen_pages (mm/page_alloc.c:2973) ___free_pages (mm/page_alloc.c:5295) __free_pages (mm/page_alloc.c:5334) tlb_remove_table_rcu (include/linux/mm.h:? include/linux/mm.h:3122 include/asm-generic/tlb.h:220 mm/mmu_gather.c:227 mm/mmu_gather.c:290) ? __cfi_tlb_remove_table_rcu (mm/mmu_gather.c:289) ? rcu_core (kernel/rcu/tree.c:?) rcu_core (include/linux/rcupdate.h:341 kernel/rcu/tree.c:2607 kernel/rcu/tree.c:2861) rcu_core_si (kernel/rcu/tree.c:2879) handle_softirqs (arch/x86/include/asm/jump_label.h:36 include/trace/events/irq.h:142 kernel/softirq.c:623) __irq_exit_rcu (arch/x86/include/asm/jump_label.h:36 kernel/softirq.c:725) irq_exit_rcu (kernel/softirq.c:741) sysvec_apic_timer_interrupt (arch/x86/kernel/apic/apic.c:1052) </IRQ> <TASK> RIP: 0010:_raw_spin_unlock_irqrestore (arch/x86/include/asm/preempt.h:95 include/linux/spinlock_api_smp.h:152 kernel/locking/spinlock.c:194) free_pcppages_bulk (mm/page_alloc.c:1494) drain_pages_zone (include/linux/spinlock.h:391 mm/page_alloc.c:2632) __drain_all_pages (mm/page_alloc.c:2731) drain_all_pages (mm/page_alloc.c:2747) kcompactd (mm/compaction.c:3115) kthread (kernel/kthread.c:465) ? __cfi_kcompactd (mm/compaction.c:3166) ? __cfi_kthread (kernel/kthread.c:412) ret_from_fork (arch/x86/kernel/process.c:164) ? __cfi_kthread (kernel/kthread.c:412) ret_from_fork_asm (arch/x86/entry/entry_64.S:255) </TASK>
Matthew has analyzed the report and identified that in drain_page_zone() we are in a section protected by spin_lock(&pcp->lock) and then get an interrupt that attempts spin_trylock() on the same lock. The code is designed to work this way without disabling IRQs and occasionally fail the trylock with a fallback. However, the SMP=n spinlock implementation assumes spin_trylock() will always succeed, and thus it's normally a no-op. Here the enabled lock debugging catches the problem, but otherwise it could cause a corruption of the pcp structure.
The problem has been introduced by commit 574907741599 ("mm/page_alloc: leave IRQs enabled for per-cpu page allocations"). The pcp locking scheme recognizes the need for disabling IRQs to prevent nesting spin_trylock() sections on SMP=n, but the need to prevent the nesting in spin_lock() has not been recognized. Fix it by introducing local wrappers that change the spin_lock() to spin_lock_iqsave() with SMP=n and use them in all places that do spin_lock(&pcp->lock).
[[email protected]: add pcp_ prefix to the spin_lock_irqsave wrappers, per Steven]
CVSS Details
- CVSS 3.1 Base Score: 7.8
- CVSS 3.1 Vector: (CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H)
Covered by Rapid7
| Product | Vendor Advisory | Solution File | Added | Published |
|---|---|---|---|---|
| Amazon_linux_2023 | — | Upgrade kernel6.12-libbpfUpgrade kernel6.12-tools-debuginfoUpgrade kernel6.12-libbpf-develUpgrade kernel-modules-extra-commonUpgrade kernel6.12-toolsUpgrade kernel-tools-develUpgrade kernel-debuginfo-common-x86_64Upgrade kernel6.12-develUpgrade kernel6.12-headersUpgrade kernelUpgrade python3-perf6.12-debuginfoUpgrade python3-perf-debuginfoUpgrade kernel-develUpgrade perf6.12Upgrade kernel-livepatch-6.1.163-186.299Upgrade kernel-libbpf-staticUpgrade kernel6.12-libbpf-staticUpgrade python3-perfUpgrade bpftoolUpgrade kernel-libbpf-develUpgrade kernel-toolsUpgrade kernel6.12-debuginfoUpgrade kernel-livepatch-6.12.68-92.122Upgrade kernel-headersUpgrade kernel-debuginfo-common-aarch64Upgrade kernel-debuginfoUpgrade perfUpgrade kernel6.12Upgrade kernel6.12-tools-develUpgrade bpftool6.12Upgrade kernel-tools-debuginfoUpgrade kernel-modules-extraUpgrade kernel6.12-debuginfo-common-aarch64Upgrade kernel-libbpf-debuginfoUpgrade kernel6.12-libbpf-debuginfoUpgrade perf-debuginfoUpgrade kernel6.12-modules-extra-commonUpgrade python3-perf6.12Upgrade perf6.12-debuginfoUpgrade bpftool-debuginfoUpgrade kernel6.12-debuginfo-common-x86_64Upgrade kernel-libbpfUpgrade bpftool6.12-debuginfoUpgrade kernel6.12-modules-extra | Mar 9, 2026 | Jan 31, 2026 |
| Debian | — | Upgrade linuxUpgrade linux-6.1 | Feb 11, 2026 | Feb 11, 2026 |
| Oracle_linux | — | Upgrade kernel-uek | Mar 12, 2026 | Jan 31, 2026 |
| Redhat_linux | — | No solution exists | Jul 17, 2026 | Jan 31, 2026 |
| Ubuntu | — | Upgrade linux-image-azure-6.8Upgrade linux-image-6.8.0-1055-awsUpgrade linux-image-oem-24.04cUpgrade linux-image-xilinxUpgrade linux-image-nvidia-64k-6.17Upgrade linux-image-6.17.0-1031-nvidiaUpgrade linux-image-ibm-classicUpgrade linux-image-gcp-6.17Upgrade linux-image-lowlatencyUpgrade linux-image-oem-24.04Upgrade linux-image-6.17.0-1019-oracle-64kUpgrade linux-image-nvidia-tegra-rt-6.8Upgrade linux-image-6.17.0-1021-gcpUpgrade linux-image-aws-lts-24.04Upgrade linux-image-azure-fipsUpgrade linux-image-generic-64kUpgrade linux-image-gcpUpgrade linux-image-oem-24.04aUpgrade linux-image-oem-6.17Upgrade linux-image-aws-64k-6.8Upgrade linux-image-ibm-6.8Upgrade linux-image-virtualUpgrade linux-image-6.17.0-1031-nvidia-64kUpgrade linux-image-azure-lts-24.04Upgrade linux-image-gcp-lts-24.04Upgrade linux-image-6.17.0-1021-azureUpgrade linux-image-gkeop-6.8Upgrade linux-image-oracleUpgrade linux-image-intel-iotgUpgrade linux-image-realtime-hwe-24.04Upgrade linux-image-intel-iot-realtimeUpgrade linux-image-azure-fips-6.8Upgrade linux-image-gke-64k-6.8Upgrade linux-image-6.17.0-1018-azure-fdeUpgrade linux-image-ibm-lts-24.04Upgrade linux-image-6.8.0-1041-gkeopUpgrade linux-image-realtime-hwe-22.04Upgrade linux-image-lowlatency-64k-hwe-22.04Upgrade linux-image-6.8.0-1054-gkeUpgrade linux-image-kvmUpgrade linux-image-fips-6.8Upgrade linux-image-generic-6.8Upgrade linux-image-6.8.0-1024-nvidia-tegra-rtUpgrade linux-image-gkeUpgrade linux-image-6.8.0-1024-nvidia-tegraUpgrade linux-image-oracle-64kUpgrade linux-image-6.8.0-117-lowlatency-64kUpgrade linux-image-6.8.0-1054-nvidia-lowlatency-64kUpgrade linux-image-6.17.0-1030-oemUpgrade linux-image-6.8.0-1059-azureUpgrade linux-image-6.8.0-1054-gke-64kUpgrade linux-image-6.8.0-1059-azure-fipsUpgrade linux-image-6.8.0-1054-nvidia-lowlatencyUpgrade linux-image-ibmUpgrade linux-image-raspi-realtimeUpgrade linux-image-gcp-fips-6.8Upgrade linux-image-generic-64k-6.8Upgrade linux-image-azure-6.17Upgrade linux-image-aws-fips-6.8Upgrade linux-image-gke-6.8Upgrade linux-image-oem-24.04bUpgrade linux-image-azure-fde-6.17Upgrade linux-image-6.17.0-1018-realtimeUpgrade linux-image-nvidia-64kUpgrade linux-image-oem-24.04dUpgrade linux-image-realtime-6.17Upgrade linux-image-nvidia-tegra-6.8Upgrade linux-image-6.8.1-1051-realtimeUpgrade linux-image-6.8.0-1058-gcpUpgrade linux-image-raspi-6.8Upgrade linux-image-nvidia-tegra-rtUpgrade linux-image-virtual-6.8Upgrade linux-image-gcp-64k-6.17Upgrade linux-image-realtime-6.8.1Upgrade linux-image-aws-64k-lts-24.04Upgrade linux-image-lowlatency-64kUpgrade linux-image-gke-64kUpgrade linux-image-gkeopUpgrade linux-image-genericUpgrade linux-image-azure-fdeUpgrade linux-image-6.8.0-116-fipsUpgrade linux-image-6.8.0-117-genericUpgrade linux-image-generic-lpaeUpgrade linux-image-raspiUpgrade linux-image-nvidia-hwe-22.04Upgrade linux-image-nvidia-64k-hwe-24.04Upgrade linux-image-6.8.0-117-lowlatencyUpgrade linux-image-xilinx-zynqmpUpgrade linux-image-raspi-realtime-6.8Upgrade linux-image-gcp-64kUpgrade linux-image-6.8.0-2045-raspi-realtimeUpgrade linux-image-6.17.0-1021-gcp-64kUpgrade linux-image-6.8.0-1032-xilinxUpgrade linux-image-nvidia-64k-6.8Upgrade linux-image-gcp-64k-6.8Upgrade linux-image-fipsUpgrade linux-image-aws-fipsUpgrade linux-image-xilinx-6.8Upgrade linux-image-nvidia-lowlatency-64kUpgrade linux-image-nvidia-6.8Upgrade linux-image-lowlatency-hwe-22.04Upgrade linux-image-6.8.0-1058-gcp-fipsUpgrade linux-image-oracle-64k-6.17Upgrade linux-image-aws-6.8Upgrade linux-image-6.8.0-1055-aws-fipsUpgrade linux-image-nvidia-6.17Upgrade linux-image-oracle-6.17Upgrade linux-image-nvidia-hwe-24.04Upgrade linux-image-nvidia-64k-hwe-22.04Upgrade linux-image-lowlatency-6.8Upgrade linux-image-gcp-64k-lts-24.04Upgrade linux-image-gcp-6.8Upgrade linux-image-6.8.0-1054-nvidia-64kUpgrade linux-image-6.8.0-1054-nvidiaUpgrade linux-image-nvidiaUpgrade linux-image-6.8.0-1056-azureUpgrade linux-image-realtimeUpgrade linux-image-6.8.0-1056-raspiUpgrade linux-image-6.17.0-1019-oracleUpgrade linux-image-azureUpgrade linux-image-nvidia-lowlatencyUpgrade linux-image-nvidia-tegraUpgrade linux-image-gcp-fipsUpgrade linux-image-6.8.0-1058-gcp-64kUpgrade linux-image-6.8.0-1055-ibmUpgrade linux-image-6.8.0-1055-aws-64kUpgrade linux-image-nvidia-lowlatency-64k-6.8Upgrade linux-image-nvidia-lowlatency-6.8Upgrade linux-image-6.8.0-117-generic-64kUpgrade linux-image-lowlatency-64k-6.8 | May 25, 2026 | May 19, 2026 |
| Vmware Photon_os | — | Use 'tdnf update' to upgrade all packages to the latest version. | Jul 10, 2026 | Jan 31, 2026 |
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