UBUNTU-CVE-2026-97942: Medium severity ubuntu/linux-hwe-edge vulnerability
In the Linux kernel, the following vulnerability has been resolved: x86/alternatives: Exclude text poking against changepageattr() From time to time, the following BUG can be observed in the x86 alternatives patching code [0]: > kernel BUG at arch/x86/kernel/alternative.c:2576! > Oops: invalid opcode: 0000 [#1] SMP NOPTI > CPU: 0 UID: 0 PID: 355 Comm: (udev-worker) Not tainted 7.1.3-1-default #1 PREEMPT(full) openSUSE Tumbleweed 8c1795b03ec64f997e57a8ad38b1161e3b98da64 > Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS unknown 02/02/2022 > RIP: 0010:textpoke+0x2aa/0x450 > Call Trace: > <TASK> > smptextpokebatchfinish+0x2a7/0x320 > staticcalltransform+0xb7/0x220 > archstaticcalltransform+0x5b/0xb0 > staticcallinit+0xe9/0x270 > staticcallmodulenotify+0x11f/0x150 > notifiercallchain+0x61/0xe0 > blockingnotifiercallchainrobust+0x63/0xc0 > loadmodule+0x1c92/0x20c0 > initmodulefromfile+0xd8/0x140 > idempotentinitmodule+0x100/0x2f0 > x64sysfinitmodule+0x71/0xe0 > dosyscall64+0xe1/0x610 > entrySYSCALL64afterhwframe+0x76/0x7e which matches the following BUGON() in alternative.c: / If something went wrong, crash and burn since recovery paths are not implemented. / BUGON(!pages[0] || (crosspageboundary && !pages[1])); This can happen if vmalloctopage() fails, for any reason. Such can happen if text poking races with CPA, which can possibly result in the collapsing of page tables (or breaking of PMD hugepages). It is not a problem for most users of vmalloctopage() (they solely own the vmalloc'd range) but, when CONFIGARCHHASEXECMEMROX=y, various modules own a single execmem vmalloc range, and can call setmemory() in parallel on it. This can happen to race against textpoke and cause havoc in vmalloctopage(). Fix it by excluding against CPA using the initmm mmap read lock. [ dhansen: Fix up SoB ordering. The actual code flow here was: Pedro=>Lorenzo=>Mike=>Me which is reflected in the SoB chain now. I believe Mike simply picked up Lorenzo's update to Pedro's post from the Link ]
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
ubuntu/linux-hwe-7.0to a version that resolves this vulnerability.Fixed in 7.0.0-42.42~24.04.1 - Upgrade
Upgrade
ubuntu/linux-riscv-7.0to a version that resolves this vulnerability.Fixed in 7.0.0-42.42.1~24.04.1 - Upgrade
Upgrade
ubuntu/linuxto a version that resolves this vulnerability.Fixed in 7.0.0-42.42 - Upgrade
Upgrade
ubuntu/linux-awsto a version that resolves this vulnerability.Fixed in 7.0.0-1016.17 - Upgrade
Upgrade
ubuntu/linux-gcpto a version that resolves this vulnerability.Fixed in 7.0.0-1016.18 - Upgrade
Upgrade
ubuntu/linux-ibmto a version that resolves this vulnerability.Fixed in 7.0.0-1017.17 - Upgrade
Upgrade
ubuntu/linux-oem-7.0to a version that resolves this vulnerability.Fixed in 7.0.0-1017.17 - Upgrade
Upgrade
ubuntu/linux-oracleto a version that resolves this vulnerability.Fixed in 7.0.0-1015.16 - Upgrade
Upgrade
ubuntu/linux-riscvto a version that resolves this vulnerability.Fixed in 7.0.0-42.42.1 - Compensating control
Exclude x86 text poking from change_page_attr() (CPA) using the init_mm mmap read lock to prevent races with vmalloc_to_page().
Event History
Frequently Asked Questions
Which Ubuntu kernel packages are listed as affected?
The listed packages are ubuntu/linux-riscv, ubuntu/linux-realtime, ubuntu/linux-hwe-edge, ubuntu/linux-azure, ubuntu/linux-gcp, ubuntu/linux-azure-fde, ubuntu/linux-gke, and ubuntu/linux-aws-5.0.
When has the failure been observed?
The reported crash occurred while loading a kernel module, in the static-call initialization path. The stack trace reaches __text_poke through smp_text_poke_batch_finish and static_call_module_notify during finit_module processing.
How can I recognize a potentially related failure?
Look for a kernel BUG in arch/x86/kernel/alternative.c at line 2576, with an invalid-opcode Oops and __text_poke in the instruction pointer or call trace. The report also shows smp_text_poke_batch_finish, __static_call_transform, and module-loading functions in the trace.