KernelScan.io

HIGH Introduced in 7.0

nfsd OpenAcl Leak

CVE-2026-89664

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 AI6.5MEDIUM

01

In the Linux kernel, the following vulnerability has been resolved: nfsd: release OPEN-decoded posix ACLs via op_release nfsd4_decode_createhow4() calls nfsd4_decode_fattr4(), which allocates refcounted struct posix_acl objects via posix_acl_alloc() and stores them in open->op_pacl and open->op_dpacl. These pointers must be released once the OPEN compound finishes. When nfsd4_decode_open_claim4() returns a non-seqid-mutating error, the dispatcher short-circuits before op_func runs: nfsd4_proc_compound() if (op->status && op->opnum == OP_OPEN) op->status = nfsd4_open_omfg(...) if (!seqid_mutating_err(ntohl(op->status))) return op->status; /* nfsd4_open() never runs */ ... opdesc->op_release(&op->u) /* must still release op_pacl/op_dpacl */ Before this change OP_OPEN had no .op_release in nfsd4_ops[], and the release pair lived inside nfsd4_open() at its out_err: label. On the short-circuit path nfsd4_open() is never invoked, so both posix_acl refs leak on every malformed OPEN compound that carries valid POSIX ACL createhow4 attributes. Add nfsd4_open_release() and wire it as .op_release for OP_OPEN. posix_acl_release() is NULL-safe, so the single release site covers both the normal path and the nfsd4_open_omfg short-circuit. Remove the matching posix_acl_release() pair from nfsd4_open()'s out_err: label to avoid double-releasing. The compound loop has two encoding branches: nfsd4_encode_operation() for normal ops, and nfsd4_encode_replay() for v4.0 replayed ops. op_release was only called from nfsd4_encode_operation(), so resources attached to op->u leak on the replay path. Move the op_release() call out of nfsd4_encode_operation() and the replay branch, placing it after the if-else in nfsd4_proc_compound(). This gives a single call site in a fairly obviously-correct place, covering both the normal encoding and replay paths.

02

Engine v0.6.0

Risk summary

An NFSv4 server running a vulnerable kernel leaks refcounted POSIX ACL objects every time a client sends a malformed OPEN compound with ACL attributes on an error short-circuit path. Any network client that can reach the NFS service can repeat this indefinitely, exhausting server memory and causing denial of service. Products that do not export NFS shares or are air-gapped are not affected.

Affectedfs/nfsd/nfs4proc.c (nfsd)

Vulnerability analysis

When an NFSv4 client sends an OPEN request that includes POSIX ACL attributes, the server allocates memory for those ACLs while decoding the request. If the request later hits certain error conditions before the normal OPEN handling runs, the server used to skip cleanup, leaving that ACL memory allocated but unreachable. The same leak also happened on the NFSv4.0 replay path, where cleanup was likewise skipped. The fix ensures the ACL memory is always freed when the OPEN request completes, whether the request is handled normally, fails early, or is replayed. Any NFSv4 client with network access to the server can trigger this repeatedly, eventually exhausting server memory.

03

BranchIntroducedFixed inPatch commit
7.27.07.2.45b3a7d7c23c0
mainline7.07.3-rc18215892993ea