CVE-2026-89651

CVE-2026-89651

Critical · published September 12, 2026

CVSS v3.1
9.8
EPSS
1%
Percentile
49.8
In the wild
Unconfirmed
What it is

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

ceph: bound MDSCapAuth path and fs_name decode in handle_session()

handle_session() decodes the MDSCapAuth records carried by a

CEPH_SESSION_OPEN message (msg_version >= 6). For each record the

match.path and match.fs_name byte strings are read by first decoding a

32-bit length and then copying that many bytes with the bare

ceph_decode_copy(). Unlike the surrounding fields, which all use the

_safe decode variants, these two copies are not preceded by a

ceph_decode_need() bounds check, and the enclosing MDSCapAuth and

MDSCapMatch struct_len fields are skipped rather than enforced as an

upper bound. A length larger than the bytes remaining in the message

front makes ceph_decode_copy() read past the end of the front buffer.

The message front is a dedicated allocation (ceph_msg_new2() ->

kvmalloc), so the over-read runs off that object. A malicious or

compromised MDS can trigger this with the first post-connect message on

mount, with no client-side user interaction; under KASAN it is reported

as a slab-out-of-bounds read in handle_session().

Impact: a malicious MDS can force the kernel client to read up to 4 GiB

past the message front allocation during session setup, crashing the

client (out-of-bounds read).

Switch both copies to ceph_decode_copy_safe(), which performs the

ceph_decode_need() bounds check before the copy and branches to the

existing bad label, matching the rest of the decoder and the error path

that frees the partially decoded cap_auths array.

The record
Technical detail
CVSS v3.1
9.8 · CRITICAL
Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CVSS v4.0
Not supplied
EPSS
0.00635 · 49.8th percentile
Published
2026-09-12T00:19Z
References (4)
EPSS history
Timeline
  • 13 SEP 03:23Z
    EPSS moved — → 0%
    epss
  • 11 SEP 19:45Z
    ceph: bound MDSCapAuth path and fs_name decode in handle_session()
    cvelistv5