---
id: CVE-2026-89538
title: 'SUNRPC: Reject krb5 v2 wrap tokens with oversized ec field'
summary: |-
  In the Linux kernel, the following vulnerability has been resolved:

  SUNRPC: Reject krb5 v2 wrap tokens with oversized ec field

  gss_krb5_unwrap_v2() sets buf->len to a logical
  length, which can be much smaller than head[0].iov_len
  (the …
severity: critical
cvss: 9.8
cvssVector: 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H'
cvssSource: cna
cwe:
  - CWE-131
vendor: Linux
product: Linux
affected:
  - >-
    Linux >= cf4c024b908353fcc48309374d39e3399d67dfd1 <
    ac9efc29346b6942e71f0e24a3178a9121330fab
  - >-
    Linux >= cf4c024b908353fcc48309374d39e3399d67dfd1 <
    b5746095b59f4d11f39f08751d36bbdfd1e5deac
  - >-
    Linux >= cf4c024b908353fcc48309374d39e3399d67dfd1 <
    9fc6d6e6db49ab55208d5dd1c424c1d0d9aa7296
  - >-
    Linux >= cf4c024b908353fcc48309374d39e3399d67dfd1 <
    4abb44a29bb515df6f49123848765c70fc9b5021
  - >-
    Linux >= cf4c024b908353fcc48309374d39e3399d67dfd1 <
    dfcd81ab45613d45996fbf483d4ef54b0ec90ab9
  - >-
    Linux >= cf4c024b908353fcc48309374d39e3399d67dfd1 <
    1f9856af065b6158271687e9788407b9573fd16f
  - >-
    Linux >= cf4c024b908353fcc48309374d39e3399d67dfd1 <
    880effc943ed82d6811f272ed3307c222b40f4d6
  - >-
    Linux >= cf4c024b908353fcc48309374d39e3399d67dfd1 <
    ad484748eec0a66eac0f13ab53b3fbedb7333c91
  - Linux 3.13
ssvc:
  exploitation: none
  automatable: 'yes'
  technicalImpact: total
  timestamp: '2026-10-16T19:23:19.852732Z'
published: '2026-09-11'
updated: '2026-10-19'
sourceUpdated: '2026-10-19T08:48:29.976Z'
source: CVEORG
sourceUrl: 'https://www.cve.org/CVERecord?id=CVE-2026-89538'
references:
  - url: 'https://git.kernel.org/stable/c/ac9efc29346b6942e71f0e24a3178a9121330fab'
  - url: 'https://git.kernel.org/stable/c/b5746095b59f4d11f39f08751d36bbdfd1e5deac'
  - url: 'https://git.kernel.org/stable/c/9fc6d6e6db49ab55208d5dd1c424c1d0d9aa7296'
  - url: 'https://git.kernel.org/stable/c/4abb44a29bb515df6f49123848765c70fc9b5021'
  - url: 'https://git.kernel.org/stable/c/dfcd81ab45613d45996fbf483d4ef54b0ec90ab9'
  - url: 'https://git.kernel.org/stable/c/1f9856af065b6158271687e9788407b9573fd16f'
  - url: 'https://git.kernel.org/stable/c/880effc943ed82d6811f272ed3307c222b40f4d6'
  - url: 'https://git.kernel.org/stable/c/ad484748eec0a66eac0f13ab53b3fbedb7333c91'
  - url: >-
      https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-89538.json
  - url: 'https://access.redhat.com/security/cve/CVE-2026-89538'
  - url: 'https://bugzilla.redhat.com/show_bug.cgi?id=2532114'
  - url: 'https://www.cve.org/CVERecord?id=CVE-2026-89538'
  - url: 'https://nvd.nist.gov/vuln/detail/CVE-2026-89538'
  - url: >-
      https://git.kernel.org/pub/scm/linux/security/vulns.git/plain/cve/published/2026/CVE-2026-89538.mbox
tags:
  - cve.org
  - csaf
  - vex
  - red-hat
  - score-dispute
epss: 0.00714
epssPercentile: 0.53473
scores:
  cna: 9.8
  vendor: 7
ingestedAt: '2026-09-14T15:23:07.452Z'
---

## Overview

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

SUNRPC: Reject krb5 v2 wrap tokens with oversized ec field

gss_krb5_unwrap_v2() sets buf->len to a logical
length, which can be much smaller than head[0].iov_len
(the allocated receive-page capacity).  It then calls
xdr_buf_trim() with a trim length derived from the 16-bit
"extra count" (ec) field in the Kerberos v2 token header.

The ec field is authenticated by the post-decrypt memcmp()
against the encrypted header copy, so a randomly-mutated
value is rejected.  However, any peer holding a valid GSS
context can legitimately encrypt a token whose ec exceeds
the plaintext length.  Per RFC 4121, such a token is
structurally malformed.

Although xdr_buf_trim() now clamps the buf->len subtraction
to avoid unsigned underflow, the buffer is still left in a
semantically invalid state (zero length, inconsistent iov
lengths) when ec is oversized.

Reject these tokens before calling xdr_buf_trim(), giving
callers a well-defined GSS_S_DEFECTIVE_TOKEN error and
keeping the xdr_buf internally consistent.  The wrapped blob
begins at a nonzero offset -- both callers pass len as
offset + opaque_len -- so buf->len still counts the offset
bytes that precede the blob.  Compare the trim length
against the remaining wrapped segment, buf->len - offset,
rather than the whole buffer; comparing against buf->len
alone leaves an offset-wide window in which an oversized ec
passes the test and xdr_buf_trim() cuts into the bytes ahead
of the blob.

## Affected

- `Linux >= cf4c024b908353fcc48309374d39e3399d67dfd1 < ac9efc29346b6942e71f0e24a3178a9121330fab`
- `Linux >= cf4c024b908353fcc48309374d39e3399d67dfd1 < b5746095b59f4d11f39f08751d36bbdfd1e5deac`
- `Linux >= cf4c024b908353fcc48309374d39e3399d67dfd1 < 9fc6d6e6db49ab55208d5dd1c424c1d0d9aa7296`
- `Linux >= cf4c024b908353fcc48309374d39e3399d67dfd1 < 4abb44a29bb515df6f49123848765c70fc9b5021`
- `Linux >= cf4c024b908353fcc48309374d39e3399d67dfd1 < dfcd81ab45613d45996fbf483d4ef54b0ec90ab9`
- `Linux >= cf4c024b908353fcc48309374d39e3399d67dfd1 < 1f9856af065b6158271687e9788407b9573fd16f`
- `Linux >= cf4c024b908353fcc48309374d39e3399d67dfd1 < 880effc943ed82d6811f272ed3307c222b40f4d6`
- `Linux >= cf4c024b908353fcc48309374d39e3399d67dfd1 < ad484748eec0a66eac0f13ab53b3fbedb7333c91`
- `Linux 3.13`

## Remediation

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

## Vendor advisories

- **Red Hat VEX** · Moderate · affected: Red Hat Enterprise Linux 10, Red Hat Enterprise Linux 6, Red Hat Enterprise Linux 7, Red Hat Enterprise Linux 8, Red Hat Enterprise Linux 9, Red Hat OpenShift Container Platform 4 · no fix planned: Red Hat Enterprise Linux 6, Red Hat Enterprise Linux 10, Red Hat Enterprise Linux 7, Red Hat Enterprise Linux 8, … · updated 2026-09-18 · [vex](https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-89538.json)
