---
id: CVE-2026-89695
title: 'nfsd: cap decoded POSIX ACL count to bound sort cost'
summary: |-
  In the Linux kernel, the following vulnerability has been resolved:

  nfsd: cap decoded POSIX ACL count to bound sort cost

  nfsd4_decode_posixacl() reads a u32 entry count off the wire and passes
  it straight to posix_acl_alloc() and sort_…
severity: high
cvss: 7.5
cvssVector: 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H'
cvssSource: cna
cwe:
  - CWE-606
vendor: Linux
product: Linux
affected:
  - >-
    Linux >= 5fc51dfc2eb160bd7ab3251ab1767cacf9c8bf05 <
    ea14d71d6ecb925673761bcf79f781f7dc9042cc
  - >-
    Linux >= 5fc51dfc2eb160bd7ab3251ab1767cacf9c8bf05 <
    4bc1108e876153a2dd6d874052b99182c3603135
  - Linux 7.0
published: '2026-09-11'
updated: '2026-10-19'
sourceUpdated: '2026-10-19T08:51:08.488Z'
source: CVEORG
sourceUrl: 'https://www.cve.org/CVERecord?id=CVE-2026-89695'
references:
  - url: 'https://git.kernel.org/stable/c/ea14d71d6ecb925673761bcf79f781f7dc9042cc'
  - url: 'https://git.kernel.org/stable/c/4bc1108e876153a2dd6d874052b99182c3603135'
  - url: >-
      https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-89695.json
  - url: 'https://access.redhat.com/security/cve/CVE-2026-89695'
  - url: 'https://bugzilla.redhat.com/show_bug.cgi?id=2532373'
  - url: 'https://www.cve.org/CVERecord?id=CVE-2026-89695'
  - url: 'https://nvd.nist.gov/vuln/detail/CVE-2026-89695'
  - url: >-
      https://git.kernel.org/pub/scm/linux/security/vulns.git/plain/cve/published/2026/CVE-2026-89695.mbox
tags:
  - cve.org
  - csaf
  - vex
  - red-hat
epss: 0.00488
epssPercentile: 0.41785
scores:
  cna: 7.5
  vendor: 7
ingestedAt: '2026-09-14T15:23:07.472Z'
---

## Overview

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

nfsd: cap decoded POSIX ACL count to bound sort cost

nfsd4_decode_posixacl() reads a u32 entry count off the wire and passes
it straight to posix_acl_alloc() and sort_pacl_range(). The latter is
an O(n^2) bubble sort, so a client-chosen count drives unbounded CPU in
the server's compound processing path.

    nfsd4_decode_posixacl()
      xdr_stream_decode_u32(&count)       /* uncapped u32 */
      posix_acl_alloc(count, GFP_KERNEL)
      sort_pacl_range(*acl, 0, count - 1) /* O(n^2) bubble sort */

The encoder side in the same file already rejects ACLs whose a_count
exceeds NFS_ACL_MAX_ENTRIES, but the decoder introduced in commit
5fc51dfc2eb1 ("NFSD: Add support for XDR decoding POSIX draft ACLs")
omitted the symmetric check.

Fix by rejecting a wire count greater than NFS_ACL_MAX_ENTRIES with
nfserr_inval, before any allocation, so the sort is bounded by
NFS_ACL_MAX_ENTRIES^2 comparisons.

While we're in here, also fix the nfserr_resource return if
posix_acl_alloc() fails. That's not a legal error code for v4.1+. Change
it to return nfserr_jukebox as that's more appropriate for memory
allocation failures.

## Affected

- `Linux >= 5fc51dfc2eb160bd7ab3251ab1767cacf9c8bf05 < ea14d71d6ecb925673761bcf79f781f7dc9042cc`
- `Linux >= 5fc51dfc2eb160bd7ab3251ab1767cacf9c8bf05 < 4bc1108e876153a2dd6d874052b99182c3603135`
- `Linux 7.0`

## Remediation

Refer to the linked advisories for vendor-supplied fixes and affected version ranges.

## Vendor advisories

- **Red Hat VEX** · Moderate · affected: Red Hat OpenShift Container Platform 4 · no fix planned: Red Hat OpenShift Container Platform 4 · updated 2026-09-16 · [vex](https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-89695.json)
