CVE-2026-89685
largeClock-domain mismatch in Linux kernel nfsd enables unauthenticated NFSv4 DoS
The Linux kernel's in-kernel NFS server (nfsd) computes the NFSv4 grace-period deadline from nn->boot_time (CLOCK_REALTIME) but compares it against ktime_get_boottime_seconds() (CLOCK_BOOTTIME), so the deadline check is effectively always false — it would take roughly 54 years of uptime for the comparison to succeed naturally. An unauthenticated remote client can exploit this by sending CLAIM_PREVIOUS OPEN requests that keep the server in its grace period indefinitely, during which all non-reclaim operations from every other client are rejected. The result is a network-reachable denial of service with no confidentiality or integrity impact (CVSS 3.1 score 7.5, availability-only). Any host running an affected kernel with the nfsd server enabled and reachable by untrusted or multi-tenant clients is affected; the fix adds a CLOCK_BOOTTIME-based boot_time_bt variable for the deadline while preserving boot_time for its clientid-nonce role. No public proof of concept exists, the flaw is not in CISA's KEV, and no exploitation is known.
What to do: Upgrade to a kernel containing the boot_time_bt fix as soon as your distribution ships it. Until patched, restrict nfsd exports and port 2049 to trusted client networks and IP allowlists so unauthenticated parties cannot reach the server, and monitor for NFSv4 clients issuing sustained CLAIM_PREVIOUS opens that keep the server stuck in grace after a restart (an nfsd restart resets the grace state). Note that only hosts actually running kernel nfsd are exposed — userspace NFS servers such as NFS-Ganesha do not use this code path.
| Linux kernel (nfsd) | — |
Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.
In the Linux kernel, the following vulnerability has been resolved: nfsd: fix clock domain mismatch in clients_still_reclaiming() clients_still_reclaiming() computes a deadline from nn->boot_time (CLOCK_REALTIME, ~1.7 billion) but compares it against ktime_get_boottime_seconds() (CLOCK_BOOTTIME, seconds since boot). The comparison is always false — it would take ~54 years of uptime for BOOTTIME to exceed the REALTIME-derived deadline. This means any client can hold the server in grace indefinitely by sending CLAIM_PREVIOUS OPEN requests, blocking all non-reclaim operations for all other clients. Add boot_time_bt (CLOCK_BOOTTIME) alongside the existing boot_time and use it for the deadline computation. boot_time (CLOCK_REALTIME) is preserved for its cl_boot clientid-nonce role.
- Vector
- CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
In the news0 stories
No ingested article mentions this CVE yet.