GCVE Workshop - 22 September 2026 (14:00-18:00), Luxembourg Before The Vulnopticon Conference - Registration

GHSA-2MMP-54R9-HMH2

Vulnerability from github – Published: 2026-09-11 21:31 – Updated: 2026-09-13 09:32
VLAI
Details

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.

Show details on source website

{
  "affected": [],
  "aliases": [
    "CVE-2026-89664"
  ],
  "database_specific": {
    "cwe_ids": [],
    "github_reviewed": false,
    "github_reviewed_at": null,
    "nvd_published_at": "2026-09-11T20:19:52Z",
    "severity": "HIGH"
  },
  "details": "In the Linux kernel, the following vulnerability has been resolved:\n\nnfsd: release OPEN-decoded posix ACLs via op_release\n\nnfsd4_decode_createhow4() calls nfsd4_decode_fattr4(), which allocates\nrefcounted struct posix_acl objects via posix_acl_alloc() and stores\nthem in open-\u003eop_pacl and open-\u003eop_dpacl. These pointers must be\nreleased once the OPEN compound finishes.\n\nWhen nfsd4_decode_open_claim4() returns a non-seqid-mutating error,\nthe dispatcher short-circuits before op_func runs:\n\n    nfsd4_proc_compound()\n      if (op-\u003estatus \u0026\u0026 op-\u003eopnum == OP_OPEN)\n          op-\u003estatus = nfsd4_open_omfg(...)\n              if (!seqid_mutating_err(ntohl(op-\u003estatus)))\n                  return op-\u003estatus;   /* nfsd4_open() never runs */\n      ...\n      opdesc-\u003eop_release(\u0026op-\u003eu)  /* must still release op_pacl/op_dpacl */\n\nBefore this change OP_OPEN had no .op_release in nfsd4_ops[], and the\nrelease pair lived inside nfsd4_open() at its out_err: label. On the\nshort-circuit path nfsd4_open() is never invoked, so both posix_acl\nrefs leak on every malformed OPEN compound that carries valid POSIX\nACL createhow4 attributes.\n\nAdd nfsd4_open_release() and wire it as .op_release for OP_OPEN.\nposix_acl_release() is NULL-safe, so the single release site covers\nboth the normal path and the nfsd4_open_omfg short-circuit. Remove\nthe matching posix_acl_release() pair from nfsd4_open()\u0027s out_err:\nlabel to avoid double-releasing.\n\nThe compound loop has two encoding branches: nfsd4_encode_operation()\nfor normal ops, and nfsd4_encode_replay() for v4.0 replayed ops.\nop_release was only called from nfsd4_encode_operation(), so resources\nattached to op-\u003eu leak on the replay path.\n\nMove the op_release() call out of nfsd4_encode_operation() and the\nreplay branch, placing it after the if-else in nfsd4_proc_compound().\nThis gives a single call site in a fairly obviously-correct place,\ncovering both the normal encoding and replay paths.",
  "id": "GHSA-2mmp-54r9-hmh2",
  "modified": "2026-09-13T09:32:27Z",
  "published": "2026-09-11T21:31:35Z",
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-89664"
    },
    {
      "type": "WEB",
      "url": "https://git.kernel.org/stable/c/5b3a7d7c23c071efe12dd1bc1d2e5f97c4892921"
    },
    {
      "type": "WEB",
      "url": "https://git.kernel.org/stable/c/8215892993ea9f5231da4fa9eb42428a286fce8b"
    }
  ],
  "schema_version": "1.4.0",
  "severity": [
    {
      "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H",
      "type": "CVSS_V3"
    }
  ]
}



Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.

Sightings

Author Source Type Date Other

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or observed by the user.
  • Confirmed: The vulnerability has been validated from an analyst's perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
  • Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
  • Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
  • Not confirmed: The user expressed doubt about the validity of the vulnerability.
  • Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.

Loading…

Detection rules are retrieved from Rulezet.

Loading…

Loading…

Related by attack behaviour

Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.


Loading…