CVE-2026-53109
NoneCVSS
—
EPSS
0.1%
Published
Jun 24, 2026
CISA due date
—
Cloudanix analysis
Some PowerPC Linux systems can become unstable or crash when a local program triggers a rare memory-cleanup error in the operating system kernel.
- Exploitation
- Local Privilege
- Attacker needs
- Local User
- Complexity
- Moderate
- Impact
- Denial Of Service
- Component
- OS kernel
- Class
- Denial of service
- Remediation
- Patch
- Effort
- Low
- Patch risk
- Low
What it actually does
This flaw is a Linux kernel memory-management bug in the PowerPC page-table fragment handling path. Under a narrow condition involving deferred freeing of PTE page-table fragments, shared-memory memory collapse behavior, and process exit, the kernel can free a page-table fragment folio while the folio still has the active page flag set. That produces a “Bad page state” condition during page freeing and can trigger a kernel warning, BUG condition, or system instability. The practical security impact is denial of service on affected PowerPC systems rather than privilege escalation or data disclosure based on the available description.
Why it matters to the business
Affected PowerPC Linux systems may experience kernel crashes, service interruption, or host instability if the vulnerable memory-management path is triggered. The risk is currently lower than widely exploited remote flaws because EPSS is very low, it is not listed in CISA KEV, no ransomware use is indicated, and no public exploit maturity is reported; however, outages on critical PowerPC workloads can still have significant operational impact.
How an attack unfolds
An attacker would need the ability to run code or influence workloads on an affected PowerPC Linux system. They would attempt to exercise the memory-management corner case by creating mappings that involve shared memory, page-table fragments, and memory collapse behavior such as MADV_COLLAPSE, then cause process teardown while vulnerable page-table fragment state remains cached in the process memory context. If timing and memory state align, the kernel may free a page-table backing folio without clearing the active flag, causing a bad page state during the exit path. Successful exploitation is expected to result in local denial of service, such as a kernel BUG, crash, or system instability, rather than direct compromise.
How to fix it
Apply the vendor kernel update that includes the upstream fix for the PowerPC pgtable-frag pte_frag_destroy handling. Because no specific affected product list or fixed package versions were provided, use the latest stable kernel from the operating-system or appliance vendor and confirm that it contains the fix for the PowerPC pte_frag_destroy active-flag handling issue. Where immediate patching is not possible, reduce exposure by limiting untrusted local code execution on affected PowerPC systems, constraining container or shell access, and applying workload isolation controls. Reboot into the fixed kernel after installation; simply installing the package is not sufficient if the host continues running the vulnerable kernel.
How to confirm the fix worked
Confirm the running kernel is the remediated vendor build, not just that an updated package is installed. On Linux systems, compare the running kernel from `uname -a` or `/proc/version` with the vendor advisory and installed package metadata. Review the vendor kernel changelog or source package for the PowerPC pgtable-frag fix in `pte_frag_destroy` or equivalent references to clearing the folio active flag before freeing page-table fragments. Validate exposure by identifying whether the system is PowerPC-based and running a kernel version in the affected range. After patching and rebooting, monitor kernel logs for absence of recurring `BUG: Bad page state` messages referencing `pte_frag_destroy`, `arch_exit_mmap`, or `exit_mmap`.
Typical attack path
- Gain the ability to execute a local program or otherwise run controlled workloads on an affected PowerPC Linux host.
- Create memory mappings that exercise shared-memory or page-table-fragment allocation paths relevant to PowerPC 64K page configurations.
- Trigger page-table retraction or collapse behavior, such as through memory advice patterns involving MADV_COLLAPSE on suitable ranges.
- Exit or tear down the process while vulnerable cached page-table fragment state is present.
- Cause the kernel to hit a bad page state during page-table fragment destruction, potentially resulting in kernel instability or denial of service.
How to detect it
To determine whether this issue may already have been triggered, review kernel logs, system journals, crash dumps, and monitoring alerts for bad page state errors on PowerPC hosts. Relevant log sources include `dmesg`, `/var/log/kern.log`, `/var/log/messages`, `/var/log/syslog`, `journalctl -k`, kdump/vmcore records, crash collector output, and infrastructure monitoring events for unexpected reboots or kernel BUG/oops conditions. Look for kernel stack traces containing `BUG: Bad page state`, `PAGE_FLAGS_CHECK_AT_FREE`, `pte_frag_destroy`, `arch_exit_mmap`, `exit_mmap`, `__mmput`, `do_exit`, and PowerPC platform identifiers such as `pSeries`, `POWER`, or `ppc64`. Because this is a denial-of-service class local kernel bug, exploitation may leave no file-based artifact beyond logs, crash dumps, and workload telemetry. Correlate any matching kernel event with local process execution history, job scheduler activity, container launches, shared-memory intensive workloads, or programs using `madvise`/memory-collapse behavior around the same time.
- BUG: Bad page state
- PAGE_FLAGS_CHECK_AT_FREE flag(s) set
- pte_frag_destroy
- arch_exit_mmap
- exit_mmap
- __mmput
- do_exit
- madvise MADV_COLLAPSE
- retract_page_tables
- pte_free_defer
- pte_fragment_free
- pt_frag_refcount
- folio active flag
- Hardware name: IBM pSeries
- POWER10
- ppc64
What your security team should do
- Prioritize patching affected PowerPC Linux systems that run multi-user workloads, containers, untrusted code, batch jobs, or shared hosting workloads.
- Confirm whether any PowerPC systems are in scope; x86, ARM, and other non-PowerPC platforms are not indicated as affected by the described architecture-specific bug.
- Reboot systems after installing the fixed kernel and verify the active running kernel version.
- Until patching is complete, restrict local code execution by untrusted users and tighten container, CI runner, shell, and job-scheduler access on affected hosts.
- Add temporary monitoring for kernel log messages indicating bad page state errors in `pte_frag_destroy`, `arch_exit_mmap`, `exit_mmap`, or `do_exit`.
- Treat any repeated kernel bad-page-state events on PowerPC systems as potential stability incidents and investigate whether they correlate with local workloads attempting to trigger memory-management edge cases.
The record
In the Linux kernel, the following vulnerability has been resolved: powerpc/pgtable-frag: Fix bad page state in pte_frag_destroy powerpc uses pt_frag_refcount as a reference counter for tracking it's pte and pmd page table fragments. For PTE table, in case of Hash with 64K pagesize, we have 16 fragments of 4K size in one 64K page. Patch series [1] "mm: free retracted page table by RCU" added pte_free_defer() to defer the freeing of PTE tables when retract_page_tables() is called for madvise MADV_COLLAPSE on shmem range. [1]: https://lore.kernel.org/all/7cd843a9-aa80-14f-5eb2-33427363c20@google.com/ pte_free_defer() sets the active flag on the corresponding fragment's folio & calls pte_fragment_free(), which reduces the pt_frag_refcount. When pt_frag_refcount reaches 0 (no active fragment using the folio), it checks if the folio active flag is set, if set, it calls call_rcu to free the folio, it the active flag is unset then it calls pte_free_now(). Now, this can lead to following problem in a corner case... [ 265.351553][ T183] BUG: Bad page state in process a.out pfn:20d62 [ 265.353555][ T183] page: refcount:0 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x20d62 [ 265.355457][ T183] flags: 0x3ffff800000100(active|node=0|zone=0|lastcpupid=0x7ffff) [ 265.358719][ T183] raw: 003ffff800000100 0000000000000000 5deadbeef0000122 0000000000000000 [ 265.360177][ T183] raw: 0000000000000000 c0000000119caf58 00000000ffffffff 0000000000000000 [ 265.361438][ T183] page dumped because: PAGE_FLAGS_CHECK_AT_FREE flag(s) set [ 265.362572][ T183] Modules linked in: [ 265.364622][ T183] CPU: 0 UID: 0 PID: 183 Comm: a.out Not tainted 6.18.0-rc3-00141-g1ddeaaace7ff-dirty #53 VOLUNTARY [ 265.364785][ T183] Hardware name: IBM pSeries (emulated by qemu) POWER10 (architected) 0x801200 0xf000006 of:SLOF,git-ee03ae pSeries [ 265.364908][ T183] Call Trace: [ 265.364955][ T183] [c000000011e6f7c0] [c000000001cfaa18] dump_stack_lvl+0x130/0x148 (unreliable) [ 265.365202][ T183] [c000000011e6f7f0] [c000000000794758] bad_page+0xb4/0x1c8 [ 265.365384][ T183] [c000000011e6f890] [c00000000079c020] __free_frozen_pages+0x838/0xd08 [ 265.365554][ T183] [c000000011e6f980] [c0000000000a70ac] pte_frag_destroy+0x298/0x310 [ 265.365729][ T183] [c000000011e6fa30] [c0000000000aa764] arch_exit_mmap+0x34/0x218 [ 265.365912][ T183] [c000000011e6fa80] [c000000000751698] exit_mmap+0xb8/0x820 [ 265.366080][ T183] [c000000011e6fc30] [c0000000001b1258] __mmput+0x98/0x300 [ 265.366244][ T183] [c000000011e6fc80] [c0000000001c81f8] do_exit+0x470/0x1508 [ 265.366421][ T183] [c000000011e6fd70] [c0000000001c95e4] do_group_exit+0x88/0x148 [ 265.366602][ T183] [c000000011e6fdc0] [c0000000001c96ec] pid_child_should_wake+0x0/0x178 [ 265.366780][ T183] [c000000011e6fdf0] [c00000000003a270] system_call_exception+0x1b0/0x4e0 [ 265.366958][ T183] [c000000011e6fe50] [c00000000000d05c] system_call_vectored_common+0x15c/0x2ec The bad page state error occurs when such a folio gets freed (with active flag set), from do_exit() path in parallel. ... this can happen when the pte fragment was allocated from this folio, but when all the fragments get freed, the pte_frag_refcount still had some unused fragments. Now, if this process exits, with such folio as it's cached pte_frag in mm->context, then during pte_frag_destroy(), we simply call pagetable_dtor() and pagetable_free(), meaning it doesn't clear the active flag. This, can lead to the above bug. Since we are anyway in do_exit() path, then if the refcount is 0, then I guess it should be ok to simply clear the folio active flag before calling pagetable_dtor() & pagetable_free().
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|