data built 2026-10-19T13:16:53Z

Look up another CVE · open CVE-2026-89532 in the interactive tracker

CVE-2026-89532

svcrdma: Fix pcl_for_each_segment for empty chunks

9.1 EPSS 0.5% AV:N

Published 2026-09-11 (37 days ago) by the Linux kernel CNA. Subsystem include/linux. Debian urgency: not yet assigned.

What to do, per Debian release

Debian's own status for CVE-2026-89532 in every release this site tracks, and what each one means in practice. Every status below is the one the Debian Security Team publishes for this CVE. source

ReleaseStatus VersionWhat this means
Debian 12bookwormfixedDLA-4841-1 · 2026-10-17 · text6.1.190-1Update the kernel and reboot. DLA-4841-1 shipped the fix on 2026-10-17, in 6.1.190-1. A running kernel keeps the old code until the machine restarts.
Debian 13trixiefixedDSA-6528-1 · 2026-09-29 · text6.12.111-1Update the kernel and reboot. DSA-6528-1 shipped the fix on 2026-09-29, in 6.12.111-1. A running kernel keeps the old code until the machine restarts.
Debian 14forkyfixed7.2.6-1Update the kernel and reboot. Fixed in 7.2.6-1. A running kernel keeps the old code until the machine restarts.
Debian unstablesidfixed7.2.6-1Update the kernel and reboot. Fixed in 7.2.6-1. A running kernel keeps the old code until the machine restarts.
Debian 12bookworm · linux-6.12fixedDLA-4817-1 · 2026-10-04 · text6.12.111-1~deb12u1Update the kernel and reboot. DLA-4817-1 shipped the fix on 2026-10-04, in 6.12.111-1~deb12u1. A running kernel keeps the old code until the machine restarts.

The vulnerability

What the bug is

When a parsed chunk list contains a chunk whose ch_segcount is zero, pcl_for_each_segment computes its inclusive upper bound as &chunk->ch_segments[ch_segcount - 1]. ch_segcount is u32, so the subtraction wraps to 0xFFFFFFFF and the bound lands far past the ch_segments flex array. The loop body then walks unrelated memory at sizeof(struct svc_rdma_segment) stride until it faults. A zero-segcount chunk is reachable from the wire: xdr_check_write_chunk() only rejects segcount values greater than rc_maxpages, and pcl_alloc_write() links a freshly allocated chunk onto rc_write_pcl/rc_reply_pcl before its segment-fill loop runs, so a Write or Reply chunk advertising zero segments leaves ch_segcount == 0 on the list. When the transport has negotiated Send-With-Invalidate, svc_rdma_get_inv_rkey() iterates all four PCLs with pcl_for_each_segment and dereferences segment->rs_handle on each iteration, turning the underflow into an out-of-bounds read and a general protection fault. xdr_check_write_list / xdr_check_reply_chunk pcl_alloc_write() chunk = pcl_alloc_chunk(...) /* ch_segcount = 0 */ list_add_tail(&chunk->ch_list, &pcl->cl_chunks) /* fill loop iterates zero times for wire segcount 0 */ svc_rdma_get_inv_rkey() pcl_for_each_chunk(rc_write_pcl) pcl_for_each_segment(segment, chunk) pos <= &ch_segments[0u - 1u] /* 0xFFFFFFFF */ segment->rs_handle /* OOB read -> GPF */ Fix by switching the macro to a half-open upper bound that uses ch_segcount directly. For ch_segcount == 0 the loop start equals the loop end and the body is skipped; for ch_segcount > 0 the iteration range is unchanged. All six existing call sites in net/sunrpc/xprtrdma/svc_rdma_recvfrom.c and net/sunrpc/xprtrdma/svc_rdma_rw.c remain correct under the new bound, so no caller changes are needed.

Where it lives

The fix touches these files. If the subsystem is one you do not use, the practical exposure is lower, though the package is still the vulnerable one.

include/linux/sunrpc/svc_rdma_pcl.h

What this is
KERNEL NFSD, SUNRPC, AND LOCKD SERVERSMAINTAINERS section matched on include/linux/sunrpc/ · linux-nfs@vger.kernel.org · Supported
Show whether Debian builds this, per release

Not established. This site could not find the build rule for the affected file in the kernel trees Debian ships, so it has no answer about whether Debian compiles this code. Read that as unknown, never as absent.

  • bookworm, trixie, forky, sid, bookworm · linux-6.12?
?
not established - no Makefile entry for the affected file

Where a release above reads "not established", no build rule for the affected file was found in that release's kernel tree. That is a gap in this lookup, not a finding that the code is absent.

From the configuration Debian publishes for every kernel flavour it builds. It covers only the architectures Debian ships a linux-config package for, and nothing about a kernel you built yourself. Debian's own status above stays authoritative about the source package.MAINTAINERS

Signals

Published
2026-09-11 (37 days ago)source
CVSS
9.1 critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:Hsource recompute it
Attack vector
network (AV:N)source
EPSS
0.50%, higher than 41.6% of all CVEssource
CISA KEV
not listedthe KEV catalogue
Debian urgency
not yet assignedsource
Subsystem
include/linux

Upstream fixes

The versions the CNA records as introducing and fixing this, and the commit for each. source

IntroducedFixed inCommit
5.115.15.2211e2e3481e391
5.116.1.1883a78b841879c
5.116.6.15706d0390c37fa
5.116.12.1099c5a03c3dc50
5.116.18.50a1c954ca4977
5.117.2.46d33a7e6bf6c
5.117.3b7713a784c59

Debian advisories

AdvisoryDateShipped toDebian
DLA-4841-12026-10-17bookworm 6.1.190-1tracker
DLA-4817-12026-10-04bookworm 6.12.111-1~deb12u1tracker
DSA-6528-12026-09-29trixie 6.12.111-1tracker

Why the CNA scored it this way

Quoted from the kernel CNA's own scoring file, word for word. A highlighted metric carries the most severe value CVSS v3.1 defines for it, which is what pushes the score up. source

AV:NAttack vector, network
svcrdma is the nfsd RPC-over-RDMA server transport and parses Write/Reply chunks from remote peers over iWARP or routable RoCEv2; a remote NFS/RDMA client triggers the bug with a crafted transport header on an established RDMA connection.
AC:LAttack complexity, low
The attacker sets RPCRDMA_CMP_F_SND_W_INV_OK on connect and sends a Write or Reply chunk with segcount 0, which xdr_check_write_chunk accepts; Send-With-Invalidate is available on typical RDMA devices, so svc_rdma_get_inv_rkey hits the underflow deterministically.
PR:NPrivileges required, none
svc_rdma_xdr_decode_req and svc_rdma_get_inv_rkey run in svc_rdma_recvfrom before svc_process/svc_authenticate; RDMA CM accept and RPC-over-RDMA header parsing require no NFS credentials or capabilities.
UI:NUser interaction, none
Exploitation requires only attacker-generated RDMA connect and RPC-over-RDMA messages to a listening NFS/RDMA service; no victim user action is needed.
S:UScope, unchanged
The out-of-bounds read and resulting general protection fault occur in the host kernel NFS/RDMA server and do not cross a VM, IOMMU, or sandbox boundary.
C:HConfidentiality impact, high
With ch_segcount 0, pcl_for_each_segment underflows the u32 bound to 0xFFFFFFFF and walks adjacent kernel heap at sizeof(struct svc_rdma_segment) stride, an unbounded out-of-bounds read rather than a few-byte leak.
I:NIntegrity impact, none
svc_rdma_get_inv_rkey only loads segment->rs_handle from the overrun pointer; the defect is a read-only walk with no out-of-bounds write, use-after-free, or control-flow hijack primitive.
A:HAvailability impact, high
The unbounded walk continues until it hits unmapped memory and raises a general protection fault, oopsing or panicking the kernel, and the attacker can repeat it on each request.