Description
In the Linux kernel, the following vulnerability has been resolved:

mm: don't schedule deferred kernel page table freeing while booting

Booting with a boot-time function tracer and a filter, for example

ftrace=function ftrace_filter=pud_free_pmd_page

panics on 7.3-rc4 as soon as the tracer starts:

[ 23.531178] Starting tracer 'function'
[ 23.675800] Oops: general protection fault, probably for non-canonical address 0xdffffc0000000038: 0000 [#1] SMP KASAN NOPTI
[ 23.819917] KASAN: null-ptr-deref in range [0x00000000000001c0-0x00000000000001c7]
[ 23.964025] CPU: 0 UID: 0 PID: 0 Comm: swapper Not tainted 7.3.0-rc4-fe2ec83746e5-with-fixes-v2+ #195 PREEMPT(undef)
[ 24.252248] RIP: 0010:__queue_work+0xab/0xf00
[ 25.981629] Call Trace:
[ 26.125727] <TASK>
[ 26.413912] ? pagetable_free_kernel+0x20/0x120
[ 26.990283] queue_work_on+0x97/0xf0
[ 27.134382] __cpa_collapse_large_pages+0x501/0x6f0
[ 27.566662] cpa_flush+0x394/0x620
[ 27.998953] change_page_attr_set_clr+0x321/0x4a0
[ 29.151729] set_memory_rox+0xa2/0xf0
[ 29.584018] create_trampoline+0x431/0x6f0
...
[ 44.343347] Kernel panic - not syncing: Attempted to kill the idle task!

The boot-time tracer is started from early_trace_init(), which runs
before workqueue_init_early(). Making its trampoline read-only splits a
large page, and CPA collapses it again right away. The split table has
been a kernel page table since commit 9e4a3ec3411b
("x86/mm/pat: Allocate split page tables as kernel page tables"), so the
collapse frees it through pagetable_free_kernel(), which queues work on
system_percpu_wq - still NULL at that point. That commit is correct in
itself; it only lets CPA reach pagetable_free_kernel() before the
workqueue that function relies on exists.

Keep putting the table on the list, but don't schedule the work while
the system is still booting. A core_initcall schedules it once to free
whatever was queued by then.
Published: 2026-10-26
Score: n/a
EPSS: n/a
KEV: No
Impact: Kernel crash during boot
Action: Update Kernel
AI Analysis

Impact

In this vulnerability, the Linux kernel incorrectly schedules work to free kernel page tables while the system is still booting. When a boot‑time function tracer is enabled, the tracer’s trampoline is made read‑only, which triggers a page table collapse. The collapse calls pagetable_free_kernel() that queues work on a workqueue that has not yet been initialized. The resulting null pointer dereference causes a general protection fault and a kernel panic, leading to a boot failure that renders the system unusable until the kernel is fixed.

Affected Systems

The flaw resides in the Linux kernel’s memory management code, affecting all kernel versions that contain the buggy sequence. The defect is present in at least the 7.3‑rc4 releases and earlier kernels that use the same page‑table‑free logic before work queues are fully initialized. The affected product is the Linux operating system kernel, which is used by all major distributions that ship the upstream kernel without the patch.

Risk and Exploitability

No EPSS score or KEV listing is available, and a CVSS score is not supplied. Because the bug manifests only when boot‑time tracing is enabled, a direct exploitation path would require the attacker to control the kernel boot options or have root privileges to inject a tracer configuration. The resulting denial of service can be used to crash legitimate systems, but no publicly known exploit exists. Administrators should treat this as a moderate risk that could be leveraged to interrupt services.

Generated by OpenCVE AI on October 26, 2026 at 16:38 UTC.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Update the kernel to a patched version that prevents scheduling page‑table‑free work during boot.
  • If a kernel upgrade is not immediately possible, disable boot‑time function tracing by removing the 'ftrace' boot parameter or setting tracer=none so that no dangling work is queued.
  • Verify that the system does not enable any tracing or page‑table collapsing mechanisms before work queues are fully initialized, and consider applying a live patch if early init order cannot be modified.

Generated by OpenCVE AI on October 26, 2026 at 16:38 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Mon, 26 Oct 2026 17:45:00 +0000

Type Values Removed Values Added
First Time appeared Linux linux
Vendors & Products Linux linux

Mon, 26 Oct 2026 17:00:00 +0000

Type Values Removed Values Added
Weaknesses CWE-476

Mon, 26 Oct 2026 15:00:00 +0000

Type Values Removed Values Added
Description In the Linux kernel, the following vulnerability has been resolved: mm: don't schedule deferred kernel page table freeing while booting Booting with a boot-time function tracer and a filter, for example ftrace=function ftrace_filter=pud_free_pmd_page panics on 7.3-rc4 as soon as the tracer starts: [ 23.531178] Starting tracer 'function' [ 23.675800] Oops: general protection fault, probably for non-canonical address 0xdffffc0000000038: 0000 [#1] SMP KASAN NOPTI [ 23.819917] KASAN: null-ptr-deref in range [0x00000000000001c0-0x00000000000001c7] [ 23.964025] CPU: 0 UID: 0 PID: 0 Comm: swapper Not tainted 7.3.0-rc4-fe2ec83746e5-with-fixes-v2+ #195 PREEMPT(undef) [ 24.252248] RIP: 0010:__queue_work+0xab/0xf00 [ 25.981629] Call Trace: [ 26.125727] <TASK> [ 26.413912] ? pagetable_free_kernel+0x20/0x120 [ 26.990283] queue_work_on+0x97/0xf0 [ 27.134382] __cpa_collapse_large_pages+0x501/0x6f0 [ 27.566662] cpa_flush+0x394/0x620 [ 27.998953] change_page_attr_set_clr+0x321/0x4a0 [ 29.151729] set_memory_rox+0xa2/0xf0 [ 29.584018] create_trampoline+0x431/0x6f0 ... [ 44.343347] Kernel panic - not syncing: Attempted to kill the idle task! The boot-time tracer is started from early_trace_init(), which runs before workqueue_init_early(). Making its trampoline read-only splits a large page, and CPA collapses it again right away. The split table has been a kernel page table since commit 9e4a3ec3411b ("x86/mm/pat: Allocate split page tables as kernel page tables"), so the collapse frees it through pagetable_free_kernel(), which queues work on system_percpu_wq - still NULL at that point. That commit is correct in itself; it only lets CPA reach pagetable_free_kernel() before the workqueue that function relies on exists. Keep putting the table on the list, but don't schedule the work while the system is still booting. A core_initcall schedules it once to free whatever was queued by then.
Title mm: don't schedule deferred kernel page table freeing while booting
First Time appeared Linux
Linux linux Kernel
CPEs cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
Vendors & Products Linux
Linux linux Kernel
References

Subscriptions

Linux Linux Linux Kernel
cve-icon MITRE

Status: PUBLISHED

Assigner: Linux

Published:

Updated: 2026-10-26T14:52:01.450Z

Reserved: 2026-09-25T10:25:14.390Z

Link: CVE-2026-99093

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-10-26T15:16:48.253

Modified: 2026-10-26T15:16:48.253

Link: CVE-2026-99093

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-10-26T17:30:15Z

Weaknesses