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-tools-develUpgrade bpftool6.12Upgrade kernel6.12-libbpf-debuginfoUpgrade kernel-libbpf-debuginfoUpgrade bpftool6.12-debuginfoUpgrade kernel6.12-debuginfo-common-x86_64Upgrade kernel-modules-extraUpgrade kernel6.12-debuginfo-common-aarch64Upgrade kernel6.12-modules-extra-commonUpgrade kernel-tools-debuginfoUpgrade perfUpgrade kernel-libbpfUpgrade kernel-debuginfoUpgrade kernel-headersUpgrade kernel6.12-modules-extraUpgrade kernel-debuginfo-common-aarch64Upgrade kernel6.12Upgrade perf-debuginfoUpgrade perf6.12-debuginfoUpgrade bpftool-debuginfoUpgrade kernel-livepatch-6.12.68-92.122Upgrade python3-perf6.12Upgrade perf6.12Upgrade kernel-tools-develUpgrade kernel6.12-toolsUpgrade kernel-modules-extra-commonUpgrade python3-perfUpgrade kernel6.12-headersUpgrade kernel6.12-libbpfUpgrade kernel-debuginfo-common-x86_64Upgrade kernel6.12-libbpf-develUpgrade bpftoolUpgrade kernel6.12-debuginfoUpgrade kernel-toolsUpgrade kernel6.12-libbpf-staticUpgrade python3-perf6.12-debuginfoUpgrade kernel-libbpf-develUpgrade kernel-develUpgrade kernel6.12-tools-debuginfoUpgrade kernel6.12-develUpgrade kernel-livepatch-6.1.163-186.299Upgrade kernel-libbpf-staticUpgrade kernelUpgrade python3-perf-debuginfo | Mar 9, 2026 | Jan 31, 2026 |
| Debian | — | Upgrade linux-6.1Upgrade linux | 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-oracle-64kUpgrade linux-image-6.8.0-1024-nvidia-tegra-rtUpgrade linux-image-lowlatency-64k-hwe-22.04Upgrade linux-image-oracleUpgrade linux-image-oem-24.04Upgrade linux-image-realtime-hwe-22.04Upgrade linux-image-nvidia-tegra-rt-6.8Upgrade linux-image-azure-fips-6.8Upgrade linux-image-generic-6.8Upgrade linux-image-ibm-6.8Upgrade linux-image-aws-64k-6.8Upgrade linux-image-oem-24.04cUpgrade linux-image-aws-lts-24.04Upgrade linux-image-6.17.0-1019-oracle-64kUpgrade linux-image-6.17.0-1021-gcpUpgrade linux-image-gcpUpgrade linux-image-azure-fipsUpgrade linux-image-generic-64k-6.8Upgrade linux-image-ibm-classicUpgrade linux-image-nvidia-64k-6.17Upgrade linux-image-generic-64kUpgrade linux-image-6.8.0-1059-azure-fipsUpgrade linux-image-azure-6.17Upgrade linux-image-gke-6.8Upgrade linux-image-oem-24.04bUpgrade linux-image-aws-fips-6.8Upgrade linux-image-6.8.0-1059-azureUpgrade linux-image-6.17.0-1018-azure-fdeUpgrade linux-image-gkeUpgrade linux-image-6.17.0-1031-nvidia-64kUpgrade linux-image-azure-6.8Upgrade linux-image-6.8.0-117-lowlatency-64kUpgrade linux-image-kvmUpgrade linux-image-fips-6.8Upgrade linux-image-6.8.0-1024-nvidia-tegraUpgrade linux-image-6.8.0-1055-awsUpgrade linux-image-6.8.0-1041-gkeopUpgrade linux-image-ibm-lts-24.04Upgrade linux-image-gcp-fips-6.8Upgrade linux-image-lowlatencyUpgrade linux-image-realtime-6.17Upgrade linux-image-gcp-6.17Upgrade linux-image-virtualUpgrade linux-image-gke-64k-6.8Upgrade linux-image-6.8.0-1054-gke-64kUpgrade linux-image-6.17.0-1031-nvidiaUpgrade linux-image-6.8.0-1054-nvidia-lowlatencyUpgrade linux-image-xilinxUpgrade linux-image-raspi-realtimeUpgrade linux-image-oem-6.17Upgrade linux-image-intel-iotgUpgrade linux-image-6.17.0-1030-oemUpgrade linux-image-intel-iot-realtimeUpgrade linux-image-6.8.0-1054-gkeUpgrade linux-image-azure-lts-24.04Upgrade linux-image-gcp-lts-24.04Upgrade linux-image-gkeop-6.8Upgrade linux-image-oem-24.04aUpgrade linux-image-realtime-hwe-24.04Upgrade linux-image-6.17.0-1021-azureUpgrade linux-image-6.8.0-1054-nvidia-lowlatency-64kUpgrade linux-image-azure-fde-6.17Upgrade linux-image-ibmUpgrade linux-image-nvidia-64kUpgrade linux-image-oem-24.04dUpgrade linux-image-6.17.0-1018-realtimeUpgrade linux-image-aws-6.8Upgrade linux-image-nvidia-tegra-6.8Upgrade linux-image-nvidia-64k-6.8Upgrade linux-image-6.8.0-1055-aws-64kUpgrade linux-image-nvidia-tegraUpgrade linux-image-xilinx-zynqmpUpgrade linux-image-realtime-6.8.1Upgrade linux-image-raspi-realtime-6.8Upgrade linux-image-nvidiaUpgrade linux-image-realtimeUpgrade linux-image-6.8.0-1056-azureUpgrade linux-image-6.17.0-1019-oracleUpgrade linux-image-6.8.0-1056-raspiUpgrade linux-image-lowlatency-6.8Upgrade linux-image-6.8.0-1054-nvidiaUpgrade linux-image-gcp-64k-lts-24.04Upgrade linux-image-6.8.0-1054-nvidia-64kUpgrade linux-image-oracle-6.17Upgrade linux-image-nvidia-hwe-24.04Upgrade linux-image-6.8.0-117-lowlatencyUpgrade linux-image-raspiUpgrade linux-image-nvidia-hwe-22.04Upgrade linux-image-oracle-64k-6.17Upgrade linux-image-azure-fdeUpgrade linux-image-nvidia-64k-hwe-24.04Upgrade linux-image-6.8.0-1055-aws-fipsUpgrade linux-image-6.8.0-117-genericUpgrade linux-image-generic-lpaeUpgrade linux-image-lowlatency-hwe-22.04Upgrade linux-image-nvidia-64k-hwe-22.04Upgrade linux-image-gcp-6.8Upgrade linux-image-6.8.0-1055-ibmUpgrade linux-image-nvidia-tegra-rtUpgrade linux-image-gcp-64k-6.17Upgrade linux-image-fipsUpgrade linux-image-aws-fipsUpgrade linux-image-6.8.1-1051-realtimeUpgrade linux-image-6.8.0-1032-xilinxUpgrade linux-image-xilinx-6.8Upgrade linux-image-virtual-6.8Upgrade linux-image-raspi-6.8Upgrade linux-image-gcp-64k-6.8Upgrade linux-image-nvidia-lowlatency-64k-6.8Upgrade linux-image-nvidia-lowlatency-6.8Upgrade linux-image-nvidia-lowlatencyUpgrade linux-image-lowlatency-64k-6.8Upgrade linux-image-gcp-fipsUpgrade linux-image-azureUpgrade linux-image-6.8.0-117-generic-64kUpgrade linux-image-6.8.0-1058-gcp-64kUpgrade linux-image-nvidia-6.8Upgrade linux-image-nvidia-6.17Upgrade linux-image-lowlatency-64kUpgrade linux-image-gkeopUpgrade linux-image-gke-64kUpgrade linux-image-genericUpgrade linux-image-aws-64k-lts-24.04Upgrade linux-image-6.8.0-116-fipsUpgrade linux-image-6.8.0-1058-gcp-fipsUpgrade linux-image-6.8.0-1058-gcpUpgrade linux-image-nvidia-lowlatency-64kUpgrade linux-image-6.8.0-2045-raspi-realtimeUpgrade linux-image-6.17.0-1021-gcp-64kUpgrade linux-image-gcp-64k | 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