CVE-2026-89713

NFSD: check truncate permission under inode lock

State
Published
Severity
9.1 Critical
Published
Sep 11, 2026
Updated
Oct 30, 2026
Reserved
Sep 11, 2026

Read the record on cve.org

Description

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

NFSD: check truncate permission under inode lock

nfsd_setattr() checks whether a size update needs NFSD_MAY_TRUNC before it takes inode_lock(). The comparison uses the file size sampled by that unlocked read, but the actual ATTR_SIZE update is applied later under inode_lock() by notify_change().

This leaves a TOCTOU window for append-only files. If a client sends a SETATTR that does not shrink the file at the time of the unlocked sample, a concurrent append can extend the file before nfsd_setattr() takes inode_lock(). notify_change() then applies a real truncation without the NFSD_MAY_TRUNC check that rejects IS_APPEND(inode). The VFS truncate syscall paths perform their own append-only checks before calling notify_change(), so NFSD must make this decision against the locked size it is about to change.

Split the write-count acquisition from the truncation permission check. Keep get_write_access() before the locked setattr work, then recheck whether the requested size is below i_size_read(inode) after inode_lock() has been acquired and before notify_change(ATTR_SIZE). This also avoids the plain unlocked inode->i_size load.

Scores

CVSSScoreVectorSource
3.19.1 CriticalCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:HLinux

Weaknesses

The record names no weakness.

Affected Products

ProductVersions
LinuxLinux
  • 783112f7401ff449d979530209b3f6c2594fdb4e to before 0669861a2e8e2bdb9c1149417d8ad821996ae4feAffected
  • 783112f7401ff449d979530209b3f6c2594fdb4e to before 52d0c5bdfe232c9974d4b11f97078b9c7814f05dAffected
  • 783112f7401ff449d979530209b3f6c2594fdb4e to before 3afa17d93ba8c925f49370c816c6dae5112d8c24Affected
  • 783112f7401ff449d979530209b3f6c2594fdb4e to before d8352da196349182e1afd5a93308256cddc0a97dAffected
  • 783112f7401ff449d979530209b3f6c2594fdb4e to before 44086254479035de42ca3d286ecf25521d4e6325Affected
  • 783112f7401ff449d979530209b3f6c2594fdb4e to before b778e0e0a16759f22a70579c3cf8d254a40d4a7fAffected
  • 604a3c407026d6162d15300478e63f901e435efcAffected
  • cc4d5dc73841b98d33cdfb9822d70b0aac4beca5Affected
  • 3ee4f442e5b37a537297b812557b1163f96b5399Affected
  • a3c6cbc4eac4473ed5461d5faae2794d3e5c0e44Affected
  • 982898d7f97a35447403c3fcecc0d96c646ce101Affected
  • 3.2.89 to before 3.3Affected
  • 3.16.44 to before 3.17Affected
  • 4.4.53 to before 4.5Affected
  • 4.9.14 to before 4.10Affected
  • 4.10.2 to before 4.11Affected
LinuxLinux
  • 4.11Affected
  • before 4.11Not affected
  • 6.1.191 through 6.1.*Not affected
  • 6.6.160 through 6.6.*Not affected
  • 6.12.109 through 6.12.*Not affected
  • 6.18.50 through 6.18.*Not affected
  • 7.2.4 through 7.2.*Not affected
  • 7.3 and laterNot affected

References

Every record here comes from the CVE Program’s CVE List. © 1999–2026 The MITRE Corporation. CVE is a registered trademark of The MITRE Corporation. The records are reproduced under the CVE Program terms of use.