Look up another CVE · open CVE-2026-93229 in the interactive tracker
CVE-2026-93229
nfsd: add missing read barrier to rpc_status_get dumpit seqcount retry
Published 2026-09-24 (24 days ago) by the Linux kernel CNA. Subsystem fs/nfsd. Debian urgency: unimportant.
What to do, per Debian release
Debian's own status for CVE-2026-93229 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 | not affected | 6.1.190-1 | Nothing to do. bookworm never shipped the vulnerable code. |
| Debian 13trixie | fixedDSA-6528-1 · 2026-09-29 · text | 6.12.111-1 | Update 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 14forky | fixed | 7.2.6-1 | Update the kernel and reboot. Fixed in 7.2.6-1. A running kernel keeps the old code until the machine restarts. |
| Debian unstablesid | fixed | 7.2.6-1 | Update 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.12 | fixedDLA-4817-1 · 2026-10-04 · text | 6.12.111-1~deb12u1 | Update 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
The hand-rolled seqcount-like protocol in nfsd_nl_rpc_status_get_dumpit() is missing a read memory barrier (smp_rmb) before its second counter check. The standard kernel read_seqcount_retry() includes smp_rmb() to ensure that all data reads complete before the counter is re-checked. Without this barrier, on weakly-ordered architectures (ARM, POWER), the CPU may reorder field reads past the second counter check, making the retry logic ineffective: it could observe a consistent counter pair while reading fields that have been concurrently modified by the writer. Add smp_rmb() before the second counter check to order the field reads ahead of it, matching the barrier semantics of the standard seqcount read-side. The begin-side smp_load_acquire() already pairs with the smp_store_release() in nfsd_dispatch(); with the smp_rmb() now ordering the field reads, the retry check no longer needs acquire semantics and reads the counter with a plain READ_ONCE(), as read_seqcount_retry() does. [ cel: Use READ_ONCE instead of smp_load_acquire() ]
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.
fs/nfsd/nfsctl.c
- What this is
- KERNEL NFSD, SUNRPC, AND LOCKD SERVERSMAINTAINERS section matched on fs/nfsd/ · linux-nfs@vger.kernel.org · Supported
- Kernel module
- nfsd
Check it on the machine
grep -w CONFIG_NFSD /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 nfsdPrints 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, sid, bookworm · linux-6.12m
- m
- a loadable module on every flavour - check lsmod, can be blacklisted
- Build switch
- CONFIG_NFSD
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-09-24 (24 days ago)source
- CVSS
- 7.1 high
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:Hsource recompute it - Attack vector
- local (AV:L)source
- EPSS
- 0.12%, higher than 2.0% of all CVEssource
- CISA KEV
- not listedthe KEV catalogue
- Debian urgency
- unimportantsource
- Subsystem
- fs/nfsd
Upstream fixes
The versions the CNA records as introducing and fixing this, and the commit for each. source
| Introduced | Fixed in | Commit |
|---|---|---|
| 6.7 | 6.12.109 | f501f2f4ec1d |
| 6.7 | 6.18.50 | 1aea0482b98e |
| 6.7 | 7.2.4 | 9b5f6475006c |
| 6.7 | 7.3 | a71f161a8571 |
Debian advisories
| Advisory | Date | Shipped to | Debian |
|---|---|---|---|
| DLA-4817-1 | 2026-10-04 | bookworm 6.12.111-1~deb12u1 | tracker |
| DSA-6528-1 | 2026-09-29 | trixie 6.12.111-1 | tracker |
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:LAttack vector, local
- The missing smp_rmb is in nfsd_nl_rpc_status_get_dumpit(), reached only via NFSD_CMD_RPC_STATUS_GET over AF_NETLINK (nfsd_nl_ops dumpit). Remote NFS RPCs in nfsd_dispatch() only write rq_status_counter and never enter dumpit, so exploitation requires local netlink.
- AC:LAttack complexity, low
- The attacker loops NFSD_CMD_RPC_STATUS_GET while sending NFSv4 COMPOUNDs with more than eight ops so nfsd_dispatch() smp_store_release()s rq_status_counter and nfsd4_release_compoundargs() mutates args->ops/opcnt. Both sides of the seqcount race are attacker-driven; weakly-ordered ARM/POWER where the missing smp_rmb matters is mainstream.
- PR:LPrivileges required, low
- NFSD_CMD_RPC_STATUS_GET is registered in nfsd_nl_ops with GENL_CMD_CAP_DUMP and no GENL_ADMIN_PERM, so genl_family_rcv_msg() skips the CAP_NET_ADMIN check. Any unprivileged process in the nfsd network namespace can invoke the dump.
- UI:NUser interaction, none
- The attacker issues the NFSD_CMD_RPC_STATUS_GET dump and the concurrent NFSv4 COMPOUNDs themselves. No separate victim action such as mounting a filesystem or opening a device is required.
- S:UScope, unchanged
- The torn and out-of-bounds reads occur in host-kernel nfsd_nl_rpc_status_get_dumpit() on the local machine. Impact stays inside one security authority and is not a VM escape, IOMMU bypass, or other cross-boundary breakout.
- C:HConfidentiality impact, high
- Without smp_rmb(), dumpit can pass the rq_status_counter retry and still load args->opcnt before nfsd4_release_compoundargs() zeros it and args->ops after it is switched to iops[8]. Indices 8-15 then read adjacent slab at nfsd4_op stride and return those u32s via NFSD_A_RPC_STATUS_COMPOUND_OPS.
- I:NIntegrity impact, none
- nfsd_nl_rpc_status_get_dumpit() only copies opnum, xid, addresses and related fields into a stack nfsd_genl_rqstp for netlink. The missing retry barrier yields an out-of-bounds or torn read, not an out-of-bounds write, use-after-free write, or control-flow hijack.
- A:HAvailability impact, high
- Slots 8-15 are sampled at sizeof(struct nfsd4_op) stride past the trailing iops[8] array in kmalloc'd nfsd4_compoundargs into adjacent or unmapped slab pages, which can oops nfsd_nl_rpc_status_get_dumpit() even if the leak is not turned into a stable read.