HIGH Introduced in 2.6.19
sunrpc PoolRouting Hang
CVE-2026-89549
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
KernelScan AI5.3MEDIUM
01Description
In the Linux kernel, the following vulnerability has been resolved: sunrpc: route to a populated pool in svc_pool_for_cpu() svc_set_num_threads() spreads the requested threads evenly across the service's pools (base = nrservs / sv_nrpools). When a service runs fewer threads than it has pools -- e.g. an nfsd configured with fewer threads than the host has NUMA nodes while running in "pernode" or "percpu" mode -- the trailing pools are left with no threads at all. svc_xprt_enqueue() selects a pool from the CPU servicing the transport, queues the transport on that pool's sp_xprts, and only wakes a thread from the same pool. Each thread services exclusively its own pool, so a transport that lands on a threadless pool is enqueued on sp_xprts and never picked up: the connection hangs indefinitely. Have svc_pool_for_cpu() skip pools that currently have no threads, falling back to the next populated pool. This trades NUMA locality for a guarantee that the work is actually serviced. sp_nrthreads is only updated under the service mutex; the lockless read here is a best-effort routing hint, so annotate it with data_race().
02KernelScan AI Analysis
Risk summary
An NFS server configured with fewer threads than NUMA pools can cause incoming connections to be routed to threadless pools, resulting in indefinite hangs. This affects availability of NFS services on multi-NUMA-node hosts. No data corruption or privilege escalation is involved.
Vulnerability analysis
When an NFS service is configured with fewer threads than it has pools (e.g., fewer threads than NUMA nodes in pernode mode), the thread distribution leaves some pools with zero threads. Incoming transports are routed to a pool based on the servicing CPU, but if that pool has no threads, the transport is queued and never picked up, causing the connection to hang indefinitely. The fix changes the pool selection logic to skip pools with no threads and fall back to the next populated pool, trading NUMA locality for guaranteed service. This is reachable by any network client connecting to an affected NFS server, requiring no privileges on the client side.
Lifecycle
03Fix Versions
| Branch | Introduced | Fixed in | Patch commit |
|---|---|---|---|
| 6.12 | 2.6.19 | 6.12.109 | 011479cf9a76 |
| 5.10 | 2.6.19 | 5.10.270 | 9accc25e5af0 |
| 5.15 | 2.6.19 | 5.15.221 | 6f66d38e2a6c |
| 6.1 | 2.6.19 | 6.1.188 | d79d7b9e8acb |
| 6.18 | 2.6.19 | 6.18.50 | 9d04d64ad192 |
| mainline | 2.6.19 | 7.3-rc1 | f6310491c4cd |
| 7.2 | 2.6.19 | 7.2.4 | 8f766d2d0b4d |
| 6.6 | 2.6.19 | 6.6.157 | edb20e8c03ae |
| cip/6.12 | 2.6.19 | 6.12.111-cip32 | 011479cf9a76 |