UBUNTU-CVE-2026-89547: High severity ubuntu/linux-hwe-edge vulnerability
In the Linux kernel, the following vulnerability has been resolved: SUNRPC: Check svc pool percpu counter allocation svccreate() initializes three per-pool percpucounter stats and ignores every return value. On SMP, percpucounterinit() fails when allocpercpugfp() cannot satisfy the allocation, leaving the failed counter with fbc->counters == NULL and its embedded rawspinlockt, listhead, and count never initialized. svccreate() returns the half-constructed svcserv to nfsd, lockd, or the NFS callback service anyway. Once that service is live, the hot-path increments in svcxprtenqueue(), svchandlexprt(), and svcpoolwakeidlethread() reach a counter whose backing pointer is NULL. The pointer is a per-cpu offset, so the access does not fault: it resolves to offset zero of the current CPU's per-cpu area and silently corrupts whatever variable lives there. A /proc/fs/nfsd/poolstats read walks the same NULL per-cpu storage and returns garbage, and on CONFIGDEBUGSPINLOCK or lockdep it splats on the never-initialized lock. Creating the broken service requires a percpu allocation failure during RPC server startup, so it is reachable only by a local administrator under memory pressure or fault injection; a remote peer cannot induce the bad state on its own. Check each percpucounterinit() return value in svccreate() and fail when an allocation fails, unwinding the counters already set up in the current pool and in every pool initialized before it. A discrete percpucounterdestroy() per counter at teardown frees each per-cpu allocation exactly once.
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
Event History
Frequently Asked Questions
Who is realistically exposed to this issue?
The affected packages listed are Ubuntu linux-riscv, linux-realtime, linux-azure, linux-gcp, linux-azure-fde, linux-gke, linux-hwe-edge, and linux-gkeop. Exposure requires an RPC server service such as nfsd, lockd, or the NFS callback service to be started after the faulty allocation condition occurs.
What conditions are required to trigger the corruption?
A per-CPU allocation must fail while an RPC server is being created, leaving one of its pool statistics counters only partially initialized. The description states that creating this broken service is reachable only by a local administrator during RPC server startup.
How might an administrator recognize an affected running service?
Reading /proc/fs/nfsd/pool_stats can return garbage because it accesses the uninitialized per-CPU counter storage. Systems built with CONFIG_DEBUG_SPINLOCK or lockdep may also report a splat for an uninitialized lock.