Look up another CVE · open CVE-2026-72466 in the interactive tracker
CVE-2026-72466
xprtrdma: Fix bcall rep leak and unbounded peek
Published 2026-08-15 (2 months ago) by the Linux kernel CNA. Subsystem net/sunrpc. Debian urgency: not yet assigned.
What to do, per Debian release
Debian's own status for CVE-2026-72466 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
| Release | Status | Version | What this means |
|---|---|---|---|
| Debian 12bookworm | fixed | 6.1.180-1 | Update the kernel and reboot. Fixed in 6.1.180-1. A running kernel keeps the old code until the machine restarts. |
| Debian 13trixie | fixed | 6.12.100-1 | Update the kernel and reboot. Fixed in 6.12.100-1. A running kernel keeps the old code until the machine restarts. |
| Debian 14forky | fixed | 7.1.5-1 | Update the kernel and reboot. Fixed in 7.1.5-1. A running kernel keeps the old code until the machine restarts. |
| Debian unstablesid | fixed | 7.1.5-1 | Update the kernel and reboot. Fixed in 7.1.5-1. A running kernel keeps the old code until the machine restarts. |
The vulnerability
What the bug is
rpcrdma_is_bcall() decodes a reply's first words to decide whether the frame is a backchannel call. Two issues in that decode path let a short or malformed reply leak the receive buffer and drain the Receive queue. First, the speculative peek p = xdr_inline_decode(xdr, 0); /* five p++ reads follow */ asks xdr_inline_decode() for zero bytes, which returns xdr->p without consulting xdr->end. The five subsequent __be32 reads can then walk up to 20 bytes past the wire payload into stale regbuf contents and misclassify the reply as a backchannel call. Second, after the post-peek p = xdr_inline_decode(xdr, 3 * sizeof(*p)); if (unlikely(!p)) return true; the short-header arm returns true without calling rpcrdma_bc_receive_call(). The contract with the caller is that a true return transfers ownership of rep to the backchannel path: rpcrdma_reply_handler() if (rpcrdma_is_bcall(r_xprt, rep)) return; /* bare return, skips out_post */ ... out_post: rpcrdma_post_recvs(r_xprt, credits + ...); Because rpcrdma_bc_receive_call() never ran, no one took rep, but rpcrdma_reply_handler still bare-returns past rpcrdma_rep_put() and rpcrdma_post_recvs(). The rep, with its persistently DMA-mapped receive buffer, is orphaned on rb_all_reps and freed only at transport teardown. This completion reposts nothing, so its slot is reclaimed only when a later forward-channel reply reaches out_post and rpcrdma_post_recvs() allocates a fresh rep to backfill; absent that traffic the Receive queue drains and the peer's Sends draw RNR NAKs. Fix by consulting xdr->end after the zero-length peek so the five __be32 reads cannot run unless 20 bytes of wire payload remain. A byte-precise comparison against xdr->end is required because a non-4-aligned receive rounds the stream's word count up past the true payload. Also return false from the short-header arm so the reply falls through the normal out_norqst cleanup chain (rpcrdma_rep_put() plus rpcrdma_post_recvs()).
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.
net/sunrpc/xprtrdma/rpc_rdma.c
- What this is
- KERNEL NFSD, SUNRPC, AND LOCKD SERVERSMAINTAINERS section matched on net/sunrpc/ · linux-nfs@vger.kernel.org · Supported
- Kernel module
- rpcrdma
Check it on the machine
grep -wE 'CONFIG_SUNRPC|CONFIG_SUNRPC_XPRT_RDMA' /boot/config-$(uname -r)Reads the booted kernel's own configuration, on the machine and nowhere else. =y is built in, =m is a module, and an is not set line means the code is not there.
lsmod | grep -w rpcrdmaPrints a line if that module is loaded right now, and nothing if it is not. One that is not loaded can still be loaded later by anything that needs it.
Show whether Debian builds this, per release
Debian builds this as a loadable module. Every release below compiles it as a module on every flavour, so whether the code is in the running kernel depends on whether that module is loaded.
- bookworm, trixie, forky, sidm
- m
- a loadable module on every flavour - check lsmod, can be blacklisted
- Build switches
- CONFIG_SUNRPC, CONFIG_SUNRPC_XPRT_RDMA
- Reads as
- all on means the file is compiled; any one off means it is not.
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 kbuild Makefiles Debian linux-config packages
Signals
- Published
- 2026-08-15 (2 months ago)source
- CVSS
- 9.8 critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:Hsource recompute it - Attack vector
- network (AV:N)source
- EPSS
- 0.74%, higher than 53.6% of all CVEssource
- CISA KEV
- not listedthe KEV catalogue
- Debian urgency
- not yet assignedsource
- Subsystem
- net/sunrpc
Upstream fixes
The versions the CNA records as introducing and fixing this, and the commit for each. source
| Introduced | Fixed in | Commit |
|---|---|---|
| 4.14 | 5.15.212 | 0cee8f9c3b14 |
| 4.14 | 6.1.178 | 7afc2f8d2fd9 |
| 4.14 | 6.6.145 | 88b5346284a1 |
| 4.14 | 6.12.97 | 07aa506436be |
| 4.14 | 6.18.40 | d7a2870dde3b |
| 4.14 | 7.1.5 | 118a16a18c59 |
| 4.14 | 7.2 | c7653d5cebc8 |
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
- The bug is reached when a remote RDMA peer's inbound message completes in rpcrdma_wc_receive() and rpcrdma_reply_handler() decodes it; a malicious or compromised NFS-over-RDMA server can send crafted short rdma_msg replies over the established RPC/RDMA connection without local access.
- AC:LAttack complexity, low
- On an active NFSv4.1+ RPC/RDMA session the attacker fully controls inbound replies and can repeatedly send short/malformed rdma_msg frames to hit the zero-length peek and short-header return-true paths, reliably leaking receive buffers and draining the Receive queue.
- PR:NPrivileges required, none
- Exploitation requires only network reachability as the connected RDMA/RPC peer (e.g., a malicious NFS server); no local account, mount privileges, or namespaced capabilities on the victim NFS client are needed to deliver the malformed RDMA replies.
- UI:NUser interaction, none
- Once an NFS-over-RDMA mount and NFSv4.1 backchannel session exist, triggering the flaw needs no additional victim action beyond the attacker sending malicious RDMA receive payloads during normal client-server communication.
- S:UScope, unchanged
- The vulnerability and its impact remain within the NFS client's kernel SUNRPC/xprtrdma transport context; it does not cross a VM, container, or IOMMU security boundary to affect other authorities.
- C:HConfidentiality impact, high
- xdr_inline_decode(xdr,0) permits up to five subsequent __be32 reads past the wire payload into stale receive-buffer contents, an out-of-bounds read that can misclassify replies and expose remnants of prior RPC/NFS data to unintended processing paths.
- I:HIntegrity impact, high
- Stale-buffer-assisted misclassification can treat a forward-channel reply as a backchannel RPC_CALL, a type confusion that routes attacker-influenced bytes into rpcrdma_bc_receive_call()/NFSv4 callback handling and can corrupt client session state.
- A:HAvailability impact, high
- Each successful trigger orphans a DMA-mapped rpcrdma_rep and skips rpcrdma_post_recvs(), monotonically draining the RDMA Receive queue until the peer gets RNR NAKs and the NFS-over-RDMA connection becomes unusable, enabling sustained remote denial of service.