Get a Demo

Let's Patch It!

Book a short call with one our specialists, we'll walk you through how Endor Patches work, and ask you a few questions about your environment (like your primary programming languages and repository management). We'll also send you an email right after you fill out the form, feel free to reply with any questions you have in advance!

CVE

CVE-2026-89551

SUNRPC: xdr_buf_trim: clamp buf->len to avoid underflow
Back to all
CVE

CVE-2026-89551

SUNRPC: xdr_buf_trim: clamp buf->len to avoid underflow

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

SUNRPC: xdrbuftrim: clamp buf->len to avoid underflow

xdrbuftrim() trims len bytes from the tail of an xdr_buf by

walking the tail, pages, and head iovecs.  Each per-section step

uses min_t() so it never removes more bytes than that section

holds, but the final accounting at the fix_len label subtracts the

total bytes actually consumed from buf->len without any clamp:

    fix_len:

            buf->len -= (len - trim);

When the caller has set buf->len to a value smaller than the sum

of the iov_lens, (len - trim) can exceed buf->len and the unsigned

subtraction wraps to near UINTMAX.  gsskrb5unwrapv2() reaches

xdrbuftrim() in exactly that state:

    buf->head[0].iovlen -= GSSKRB5TOKHDR_LEN + headskip;

    buf->len = len - (GSSKRB5TOKHDRLEN + headskip);

    xdrbuftrim(buf, ec + GSSKRB5TOKHDRLEN + tailskip);

buf->len is a small wire-derived value while the iov_lens are at

page scale, so the per-section loops legitimately consume far more

bytes than buf->len records.  The wrapped buf->len then propagates

as the authoritative stream bound into every downstream XDR

decoder.

Fix by clamping the decrement so buf->len bottoms out at zero:

    buf->len -= min_t(unsigned int, buf->len, len - trim);

On the normal path where the iov_lens sum to buf->len, (len - trim)

is always <= buf->len and the result is identical to before.  No

callers change behavior outside the underflow case.

Package Versions Affected

Package Version
patch Availability
No items found.

Automatically patch vulnerabilities without upgrading

Fix Without Upgrading
Detect compatible fix
Apply safe remediation
Fix with a single pull request

CVSS Version

Severity
Base Score
CVSS Version
Score Vector
C
H
U
9.8
-
3.1
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
C
H
U
0
-
3.1
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
C
H
U
-

Related Resources

No items found.

References

https://git.kernel.org/stable/c/3f491306dcb673ff5e78e1044ba450c58978774e, https://git.kernel.org/stable/c/4bf59cb0ea5b0ddfbc46a1dc2fa78fc8b9986ce4, https://git.kernel.org/stable/c/85e9602650e9df07190abe817cee3b4d9bc3df17, https://git.kernel.org/stable/c/a3d77bcd974b8625d16bddf448cb3a1b5e37049c, https://git.kernel.org/stable/c/a924ac4c78afab71bf82641afa3b62e0c4a8b55e, https://git.kernel.org/stable/c/ad0cce80d4af2f74674e8b635d97aa3880e83da8, https://git.kernel.org/stable/c/e6267cccd7b05cc514e57f2160aa8db85f5c2701, https://git.kernel.org/stable/c/fa16bbe987b47e771e52eeb1b4540f18d92496ac, https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/89xxx/CVE-2026-89551.json, https://nvd.nist.gov/vuln/detail/CVE-2026-89551, https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git

Severity

9.8

CVSS Score
0
10

Basic Information

Base CVSS
9.8
EPSS Probability
0.00514%
EPSS Percentile
0.41947%
Introduced Version
4c190e2f913f038c9c91ee63b59cd037260ba353,3.9.0,5.11.0,5.16.0,6.2.0,6.7.0,6.13.0,6.19.0,0
Fix Available
3f491306dcb673ff5e78e1044ba450c58978774e,5.10.270,5.15.221,6.1.188,6.6.157,6.12.109,6.18.50,7.2.4,6.12.111-1~deb12u1,6.12.111-1,0:6.12.0-207.111.5.1.el10uek,0:6.12.0-207.111.5.1.el9uek

Fix Critical Vulnerabilities Instantly

Secure your app without upgrading.
Fix Without Upgrading