KernelScan.io

HIGH Introduced in 2.6.19

sunrpc PoolRouting Hang

CVE-2026-89549

CVSS 7.5 / 10.0 NVD

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

KernelScan AI5.3MEDIUM

01

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().

02

Engine v0.6.0

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.

Affectednet/sunrpc/svc.c (sunrpc)

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.

03

BranchIntroducedFixed inPatch commit
5.102.6.195.10.2709accc25e5af0
5.152.6.195.15.2216f66d38e2a6c
6.12.6.196.1.188d79d7b9e8acb
6.122.6.196.12.109011479cf9a76
6.182.6.196.18.509d04d64ad192
6.62.6.196.6.157edb20e8c03ae
7.22.6.197.2.48f766d2d0b4d
mainline2.6.197.3f6310491c4cd
cip/5.102.6.195.10.271-cip789accc25e5af0
cip/6.12.6.196.1.189-cip61d79d7b9e8acb
cip/6.1-rt2.6.196.1.189-cip61-rt32d79d7b9e8acb
cip/6.122.6.196.12.111-cip32011479cf9a76

04

State of the newest release of each Civil Infrastructure Platform SLTS tree, from CIP's own fix records.

CIP treeState
cip/6.12Fixed in 6.12.111-cip32
cip/6.1Fixed in 6.1.189-cip61
cip/6.1-rtFixed in 6.1.189-cip61-rt32
cip/5.10Fixed in 5.10.271-cip78
cip/5.10-rtAffected — no CIP fix yet (latest 5.10.268-cip77-rt34)
cip/4.19Affected — no CIP fix yet (latest 4.19.325-cip136)
cip/4.19-rtAffected — no CIP fix yet (latest 4.19.325-cip136-rt50)
cip/4.4Affected — no CIP fix yet (latest 4.4.302-cip115)
cip/4.4-rtAffected — no CIP fix yet (latest 4.4.302-cip115-rt63)