Skip to main content
VulnerabilityPublished Updated

CVE-2026-89671: Linux kernel · nfsd: gate nfs3 setacl by argp->mask

Affects Linux kernelSource CVE Database V5

0
Compare

Not known to be exploited · CVSS 9.1 Critical · fixed in ff99ed007f065198fd723152405c22aa558f700b : patch Linux kernel as a priority.

Data as of 30 Oct 2026, 12:49 UTC

CVSS 3.1 base score
9.1Critical
How severe the flaw is on the 0–10 CVSS scale.

Thin evidence

One scorer or none
CVSS scores by source
CNA (Linux)CVSS 3.19.1
CISA SSVC
Exploitation
No evidence of active exploitation and no public proof of concept
Automatable
Attackers can reliably automate steps 1–4 of the kill chain
Technical impact
Total control over the software or total information disclosure

CISA SSVC assessment, 2026-10-16.

Patch
Available – fixed in ff99ed007f065198fd723152405c22aa558f700b, beeb33152873ad40692bd255b562966f8ba43dbd, b3bff820d068ea59767d4e91a3258231a879da5f +3
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N

Exploitation evidence

  1. Disclosed: evidence found.

    CVE published 11 Sep 2026

  2. Detectable: no evidence on record.

    No public nuclei template indexed

  3. Weaponized: no evidence on record.

    No public exploit code indexed in Metasploit or Exploit-DB

  4. Exploited in the wild: no evidence on record.

    Not in CISA KEV and no source reports exploitation

  5. Observed by OffSeq Mirage: no evidence on record.

    No attack traffic recorded by OffSeq Mirage sensors

A missing step is not evidence of safety. Sources: cve.org (opens in a new tab), the Metasploit, Exploit-DB and nuclei-templates index as of 30 Oct 2026.

What to do

Upgrade to a fixed release listed under Affected software.

Affected software

ProductAffectedFixed in
LinuxLinuxAffected
  • ≥ a257cdd0e2179630d3201c32ba14d7fcb3c3a055, < ff99ed007f065198fd723152405c22aa558f700b
Fixed in
  • ff99ed007f065198fd723152405c22aa558f700b
LinuxLinuxAffected
  • ≥ a257cdd0e2179630d3201c32ba14d7fcb3c3a055, < beeb33152873ad40692bd255b562966f8ba43dbd
Fixed in
  • beeb33152873ad40692bd255b562966f8ba43dbd
LinuxLinuxAffected
  • ≥ a257cdd0e2179630d3201c32ba14d7fcb3c3a055, < b3bff820d068ea59767d4e91a3258231a879da5f
Fixed in
  • b3bff820d068ea59767d4e91a3258231a879da5f
LinuxLinuxAffected
  • ≥ a257cdd0e2179630d3201c32ba14d7fcb3c3a055, < 453d7198a0ab07a12d46e0575861ac7b932da17e
Fixed in
  • 453d7198a0ab07a12d46e0575861ac7b932da17e
LinuxLinuxAffected
  • ≥ a257cdd0e2179630d3201c32ba14d7fcb3c3a055, < 68a80b26efdff1d09f8ae1773c6a915abb9e191d
Fixed in
  • 68a80b26efdff1d09f8ae1773c6a915abb9e191d
LinuxLinuxAffected
  • ≥ a257cdd0e2179630d3201c32ba14d7fcb3c3a055, < 3be1d8611dae4829e4608007db29f4a8748c37b2
Fixed in
  • 3be1d8611dae4829e4608007db29f4a8748c37b2

Description

In the Linux kernel, the following vulnerability has been resolved: nfsd: gate nfs3 setacl by argp->mask nfsd3_proc_setacl() calls set_posix_acl() unconditionally for both ACL_TYPE_ACCESS and ACL_TYPE_DEFAULT, passing argp->acl_access and argp->acl_default verbatim. The NFSv3 ACL decoder only populates those pointers when the corresponding mask bit is set: nfs3svc_decode_setaclargs() if (args->mask & NFS_ACL) decode into acl_access if (args->mask & NFS_DFACL) decode into acl_default /* otherwise the pointer stays NULL (pc_argzero) */ nfsd3_proc_setacl() set_posix_acl(.., ACL_TYPE_ACCESS, argp->acl_access) set_posix_acl(.., ACL_TYPE_DEFAULT, argp->acl_default) set_posix_acl(idmap, dentry, type, NULL) is the VFS "remove this ACL type" operation. A NULL pointer that means "the client did not send this arm" is therefore indistinguishable from "the client asked to remove this ACL". A SETACL with mask=NFS_ACL silently drops the directory's default ACL; mask=0 drops both. The sibling nfsd3_proc_getacl() already consults argp->mask before touching each arm; mirror that in setacl. Fix by wrapping each set_posix_acl() call in the matching mask bit check and initializing error to 0 before inode_lock so that a request with neither bit set leaves the on-disk ACLs untouched and returns nfs_ok. The out_drop_lock path and the unconditional posix_acl_release() at out: are preserved; both NULL-tolerate the skipped arms.

References

Community reviews

Loading reviews…