Look up another CVE · open CVE-2026-89692 in the interactive tracker
CVE-2026-89692
nfsd: clear CALLBACK_RUNNING on failed delegation recall queue
Published 2026-09-11 (37 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-89692 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 | not affected | 6.12.113-1 | Nothing to do. trixie never shipped the vulnerable code. |
| 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. |
The vulnerability
What the bug is
nfsd_break_one_deleg() sets NFSD4_CALLBACK_RUNNING via test_and_set_bit at entry to serialize recall work, then calls nfsd4_run_cb() to queue the recall. When the queue attempt fails the refcount bump is undone, but the RUNNING bit is left set. The only site that clears the bit is nfsd41_destroy_cb() (fs/nfsd/nfs4callback.c), which runs from the workqueue and is therefore unreachable when nothing was queued. The bit becomes a permanent latch on dp->dl_recall.cb_flags: every subsequent break_lease() on the same delegation hits the early-return guard in nfsd_break_one_deleg() and silently skips the recall, so the delegation is never broken and the conflicting open or lock stalls. Fix by clearing NFSD4_CALLBACK_RUNNING on the !queued branch alongside the refcount_dec.
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/nfs4state.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 -wE 'CONFIG_NFSD|CONFIG_NFSD_V4' /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, sidm
- m
- a loadable module on every flavour - check lsmod, can be blacklisted
- Build switches
- CONFIG_NFSD, CONFIG_NFSD_V4
- 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-09-11 (37 days ago)source
- CVSS
- 7.5 high
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:Hsource recompute it - Attack vector
- network (AV:N)source
- EPSS
- 0.61%, higher than 48.1% 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.15 | 6.18.50 | b137930ee52e |
| 6.15 | 7.2.4 | cb2d0c4d1b3d |
| 6.15 | 7.3 | b036727d334b |
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
- nfsd_break_one_deleg() runs in in-kernel nfsd (fs/nfsd/nfs4state.c) and is reached over TCP/2049 via svc_process to nfsd_dispatch to nfsd4_proc_compound: a remote NFSv4 OPEN grants a delegation, then a conflicting OPEN hits nfsd_file_acquire/nfsd_open_break_lease to __break_lease to nfsd_break_deleg_cb().
- AC:LAttack complexity, low
- The attacker drives both sides with two NFSv4 clients: one holds the delegation while the other sends conflicting OPEN/LOCK/SETATTR to invoke nfsd_break_one_deleg(), and can DESTROY_CLIENTID or flap the backchannel so queue_work() fails; the sequence is retryable and needs no uninfluenced memory layout.
- PR:NPrivileges required, none
- Default AUTH_SYS/AUTH_NULL nfsd exports do not cryptographically verify RPC credentials; any host allowed by the export can EXCHANGE_ID/SETCLIENTID, OPEN to receive a delegation, and issue a conflicting OPEN with no local Linux account or capability.
- UI:NUser interaction, none
- The attacking NFS clients send the OPEN, conflicting OPEN, and optional DESTROY_CLIENTID RPCs themselves; no victim user on the NFS server must mount a filesystem, open a file, or otherwise interact at attack time.
- S:UScope, unchanged
- The latched NFSD4_CALLBACK_RUNNING bit and stalled lease-break live in kernel nfsd/VFS state on the NFS server; this is not a VM, IOMMU, or sandbox boundary crossing.
- C:NConfidentiality impact, none
- The bug only leaves NFSD4_CALLBACK_RUNNING set so later recalls are skipped; it does not read attacker-inaccessible kernel memory, leak pointers, or return extra data to the client.
- I:NIntegrity impact, none
- There is no use-after-free, out-of-bounds write, or other memory corruption, and conflicting writers are blocked rather than committing unauthorized file changes, so integrity is unaffected.
- A:HAvailability impact, high
- When nfsd4_run_cb() fails, RUNNING stays set, later break_lease() skips CB_RECALL, nfsd4_cb_recall_prepare never queues the delegation on del_recall_lru, and fl_break_time is zeroed so VFS will not expire the lease; conflicting opens/locks then stall or retry NFS4ERR_JUKEBOX indefinitely, denying the file and NFS service.