KernelScan.io

HIGH Introduced in 6.15

nfsd DelegRecall Stall

CVE-2026-89692

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.9MEDIUM

01

In the Linux kernel, the following vulnerability has been resolved: nfsd: clear CALLBACK_RUNNING on failed delegation recall queue 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.

02

Engine v0.6.0

Risk summary

An NFS client can trigger a permanent denial of service on the NFS server by causing a delegation recall queue failure, which leaves a serialization flag permanently set. All subsequent conflicting opens or locks on the affected delegation stall indefinitely. Any system running an NFS server with exports accessible to clients is at risk.

Affectedfs/nfsd/nfs4state.c (nfsd)

Vulnerability analysis

When the NFS server tries to recall a client delegation, it marks the operation as active before queuing the background work to send the recall. If queuing fails, the active mark was left permanently set, because the cleanup that normally removes it only runs after the queued work completes. Once stuck, the mark blocks all future attempts to revoke that same delegation, so any later conflicting file open or lock stalls indefinitely. The fix removes the active mark immediately when queuing fails. Any NFS client with access to a server export can trigger this during ordinary file operations.

03

BranchIntroducedFixed inPatch commit
6.186.156.18.50b137930ee52e
7.26.157.2.4cb2d0c4d1b3d
mainline6.157.3b036727d334b