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

CVE-2026-89650

Affected Products

Linux