Description
In the Linux kernel, the following vulnerability has been resolved:

nfsd: reject out-of-range nseconds in NFSv3 SETATTR and create ops

A client can send an NFSv3 SETATTR, CREATE, MKDIR, SYMLINK or MKNOD
carrying an atime or mtime whose nseconds field is out of range. The
value is well-formed on the wire and decodes cleanly into a valid
uint32, but it is not a valid timespec64: tv_nsec must be less than
NSEC_PER_SEC.

Nothing in the setattr path clamps it. notify_change() runs the time
through timestamp_truncate(), which does not reduce tv_nsec below
NSEC_PER_SEC when the filesystem supports nanosecond granularity
(s_time_gran == 1), and the inode atime/mtime setters store it verbatim
(only ctime is normalized, via inode_set_ctime_to_ts()). The
un-normalized value then corrupts on-disk metadata: ext4's
ext4_encode_extra_time() shifts tv_nsec left by EXT4_EPOCH_BITS, which
overflows the 32-bit extra field and clobbers the seconds-epoch bits, so
the stored seconds (and thus the year) are wrong on read-back. XFS with
bigtime mis-stores the timestamp for the same reason.

Validate the client-supplied atime/mtime in the proc handlers and return
NFS3ERR_INVAL before anything is changed. RFC 1813 lists NFS3ERR_INVAL
for SETATTR and describes it as the error for a value the server 'can
not store ... in its own representation'; the client maps it to EINVAL.

Checking in the proc handlers, rather than in nfsd_setattr(), keeps the
rejection in front of object creation. The create operations create the
object before nfsd_create_setattr() runs, so a late failure would leave
the new object behind and turn a non-idempotent request into a namespace
change that reports failure. The check is therefore done up front, for
the create operations before the object is created.

tv_nsec is a long, so the comparison casts it to unsigned long (the same
width) rather than to u32, matching timespec64_valid(). A u32 cast would
truncate on 64-bit; the unsigned long cast also rejects a value that
became negative when an out-of-range u32 wire nseconds was assigned to a
32-bit long.

Only client-supplied times are checked: SET_TO_SERVER_TIME requests
carry no client value. The sattrguard3 ctime is deliberately left alone:
an out-of-range guard simply never matches the object's ctime and yields
NFS3ERR_NOT_SYNC via the existing guardtime comparison, which is the
protocol-correct outcome rather than rejecting the request.
Published: 2026-09-11
Score: 6.8 Medium
EPSS: < 1% Very Low
KEV: No
Impact: Timestamp Corruption / Data Integrity
Action: Patch Update
AI Analysis

Impact

A Linux NFS server accepted an out-of-range nanosecond value in the NFSv3 SETATTR, CREATE, MKDIR, SYMLINK, or MKNOD operations without clamping it to the valid range. The value decoded cleanly on the wire but did not satisfy the internal timespec64 requirement that tv_nsec be less than NSEC_PER_SEC. As a result, the un- normalized timestamp was stored in inode metadata, causing integer overflows during on-disk encoding on filesystems that support nanosecond granularity such as ext4 and XFS. This overflow corrupted the epoch seconds stored in the filesystem, producing incorrect access and modification timestamps reflected to clients.

Affected Systems

The vulnerability is present in any Linux kernel that runs an NFS daemon with NFSv3 support. The affected product is the Linux kernel's NFS server component (nfsd). No specific kernel version ranges are provided, so all kernel revisions prior to the application of the patch are potentially affected.

Risk and Exploitability

The CVSS score is 6.8, indicating moderate severity. An EPSS score of <1% suggests that exploitation is unlikely to be widespread. The vulnerability is not listed in CISA’s KEV catalog. An attacker would typically be a remote NFSv3 client able to send a SETATTR, CREATE, MKDIR, SYMLINK, or MKNOD request with an out-of-range tv_nsec value. No special privileges are required on the client side, and the exploit cannot achieve code execution or privilege escalation. The primary risk is the corruption of inode timestamps, which can undermine data integrity and consistency for clients relying on accurate file times.

Generated by OpenCVE AI on September 15, 2026 at 20:42 UTC.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Apply the latest Linux kernel that incorporates the nfsd patch validating the nseconds field before storage.
  • If an immediate kernel upgrade cannot be performed, disable NFSv3 support on the server to remove the vulnerable code path.
  • Configure client applications or use NFS utilities that sanitize RFC 1813 timestamp values to ensure nseconds are within the 0–999,999,999 range before sending SETATTR, CREATE, or related requests.

Generated by OpenCVE AI on September 15, 2026 at 20:42 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Debian DSA Debian DSA DSA-6528-1 linux security update
History

Sat, 12 Sep 2026 17:30:00 +0000

Type Values Removed Values Added
Weaknesses CWE-20

Sat, 12 Sep 2026 12:15:00 +0000

Type Values Removed Values Added
References
Metrics threat_severity

None

cvssV3_1

{'score': 6.8, 'vector': 'CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:H/A:H'}

threat_severity

Important


Sat, 12 Sep 2026 09:00:00 +0000

Type Values Removed Values Added
Weaknesses CWE-190
CWE-20

Fri, 11 Sep 2026 23:45:00 +0000

Type Values Removed Values Added
Description In the Linux kernel, the following vulnerability has been resolved: nfsd: reject out-of-range nseconds in NFSv3 SETATTR and create ops A client can send an NFSv3 SETATTR, CREATE, MKDIR, SYMLINK or MKNOD carrying an atime or mtime whose nseconds field is out of range. The value is well-formed on the wire and decodes cleanly into a valid uint32, but it is not a valid timespec64: tv_nsec must be less than NSEC_PER_SEC. Nothing in the setattr path clamps it. notify_change() runs the time through timestamp_truncate(), which does not reduce tv_nsec below NSEC_PER_SEC when the filesystem supports nanosecond granularity (s_time_gran == 1), and the inode atime/mtime setters store it verbatim (only ctime is normalized, via inode_set_ctime_to_ts()). The un-normalized value then corrupts on-disk metadata: ext4's ext4_encode_extra_time() shifts tv_nsec left by EXT4_EPOCH_BITS, which overflows the 32-bit extra field and clobbers the seconds-epoch bits, so the stored seconds (and thus the year) are wrong on read-back. XFS with bigtime mis-stores the timestamp for the same reason. Validate the client-supplied atime/mtime in the proc handlers and return NFS3ERR_INVAL before anything is changed. RFC 1813 lists NFS3ERR_INVAL for SETATTR and describes it as the error for a value the server 'can not store ... in its own representation'; the client maps it to EINVAL. Checking in the proc handlers, rather than in nfsd_setattr(), keeps the rejection in front of object creation. The create operations create the object before nfsd_create_setattr() runs, so a late failure would leave the new object behind and turn a non-idempotent request into a namespace change that reports failure. The check is therefore done up front, for the create operations before the object is created. tv_nsec is a long, so the comparison casts it to unsigned long (the same width) rather than to u32, matching timespec64_valid(). A u32 cast would truncate on 64-bit; the unsigned long cast also rejects a value that became negative when an out-of-range u32 wire nseconds was assigned to a 32-bit long. Only client-supplied times are checked: SET_TO_SERVER_TIME requests carry no client value. The sattrguard3 ctime is deliberately left alone: an out-of-range guard simply never matches the object's ctime and yields NFS3ERR_NOT_SYNC via the existing guardtime comparison, which is the protocol-correct outcome rather than rejecting the request.
Title nfsd: reject out-of-range nseconds in NFSv3 SETATTR and create ops
First Time appeared Linux
Linux linux Kernel
CPEs cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
Vendors & Products Linux
Linux linux Kernel
References

Subscriptions

Linux Linux Kernel
cve-icon MITRE

Status: PUBLISHED

Assigner: Linux

Published:

Updated: 2026-09-11T19:45:52.864Z

Reserved: 2026-09-11T19:38:34.745Z

Link: CVE-2026-89666

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-09-11T20:19:53.050

Modified: 2026-09-11T20:19:53.050

Link: CVE-2026-89666

cve-icon Redhat

Severity : Important

Publid Date: 2026-09-11T19:45:52Z

Links: CVE-2026-89666 - Bugzilla

cve-icon OpenCVE Enrichment

Updated: 2026-09-15T20:45:20Z

Weaknesses
  • CWE-190

    Integer Overflow or Wraparound