PT-2026-90366 · Linux · Linux
CVE-2026-89650
·
Published
2026-09-11
·
Updated
2026-09-11
None
No severity ratings or metrics are available. When they are, we'll update the corresponding info on the page.
In the Linux kernel, the following vulnerability has been resolved:
ceph: bound num export targets array for mds info v2/v3
ceph mdsmap decode() in fs/ceph/mdsmap.c reads num export targets from
each per-mds info record and advances the decode cursor by
num export targets * sizeof(u32) without first checking that many bytes
remain. The only upper-bound check that catches a runaway cursor
(*p > info end) is gated on info v >= 4, because info end is left NULL
for info v 2 and 3. When the monitor sends an MDS map whose per-mds
info version is 2 or 3 with an oversized num export targets, the cursor
moves past the message front buffer and the later export-targets loop
calls the unchecked ceph decode 32() on out-of-bounds memory.
A kernel client processes CEPH MSG MDS MAP from its monitor session
(net/ceph/mon client.c dispatches it; fs/ceph/super.c routes it to
ceph mdsc handle mdsmap(), which sets end to the front buffer bound and
calls ceph mdsmap decode()). A malicious or compromised monitor, or an
on-path attacker on an unsigned/unencrypted messenger session, can
therefore drive an out-of-bounds read in the client kernel; on x86 64
with KASAN it is reported as a slab-out-of-bounds read in
ceph mdsmap decode(). The decoded values land in the internal
info->export targets[] array, so the consequence is a kernel
out-of-bounds read, not an information leak to the attacker.
Impact: a malicious or compromised Ceph monitor sending an MDS map with
a per-mds info version of 2 or 3 and an oversized num export targets
field triggers an out-of-bounds read in the CephFS client kernel.
Add a ceph decode need() for the export-targets array before advancing
the cursor, so the bound is enforced for every info v >= 2, not only
info v >= 4. This mirrors the count-then-need idiom already used for
m data pg pools later in the same function.
Compute the export-targets byte count with size mul() and reuse that
checked length when advancing the cursor, so the attacker-controlled
num export targets multiplication fails closed on overflow rather than
relying on the later kcalloc() guard.
Found an issue in the description? Have something to add? Feel free to write us 👾
Related Identifiers
Affected Products
Linux