KernelScan.io

CRITICAL Introduced in 4.7

ceph MdsMap OOB

CVE-2026-89650

CVSS 9.1 / 10.0 NVD

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H

KernelScan AI9.1CRITICAL

01

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.

02

Engine v0.6.0

Risk summary

A malicious or compromised Ceph monitor, or an on-path attacker on an unsigned/unencrypted messenger session, can send an MDS map with an oversized num_export_targets field (per-mds info version 2 or 3) to trigger an out-of-bounds read in the CephFS client kernel. The impact is a kernel out-of-bounds read that can crash the client (denial of service); the decoded values land in an internal array, so this is not an information leak to the attacker. Systems running CephFS clients are at risk.

Affectedfs/ceph/mdsmap.c (ceph)

Vulnerability analysis

The CephFS client's MDS map decoder reads a per-mds export-targets count and advances the decode cursor by that many u32s without first verifying the remaining buffer has that many bytes. For info versions 2 and 3 the only bound check that would catch the overrun is skipped, so a monitor-supplied map with an oversized count moves the cursor past the message buffer and the subsequent decode loop reads out-of-bounds memory. The fix adds an explicit length check before advancing the cursor for all info versions from 2 onward, and computes the byte count with an overflow-safe helper so an attacker-controlled count cannot wrap. The vulnerable path is reached when a CephFS client processes an MDS map from its monitor session, so a malicious or compromised monitor, or an on-path attacker on an unsigned or unencrypted messenger session, can trigger it with no client-side privileges.

03

BranchIntroducedFixed inPatch commit
5.104.75.10.273a6eaf7bd229d
5.154.75.15.2210c4bcc3ba729
6.14.76.1.18855a06b32438c
6.124.76.12.1093bf7dba8dba9
6.184.76.18.5058c2d3e954c1
6.64.76.6.157eb3e1a1cb163
7.24.77.2.4332c444f4dc6
mainline4.77.3a3eb169ee297
cip/6.14.76.1.189-cip6155a06b32438c
cip/6.1-rt4.76.1.189-cip61-rt3255a06b32438c
cip/6.124.76.12.111-cip323bf7dba8dba9

04

State of the newest release of each Civil Infrastructure Platform SLTS tree, from CIP's own fix records.

CIP treeState
cip/6.12Fixed in 6.12.111-cip32
cip/6.1Fixed in 6.1.189-cip61
cip/6.1-rtFixed in 6.1.189-cip61-rt32
cip/5.10Affected — no CIP fix yet (latest 5.10.272-cip79)
cip/5.10-rtAffected — no CIP fix yet (latest 5.10.272-cip79-rt35)
cip/4.19Affected — no CIP fix yet (latest 4.19.325-cip136)
cip/4.19-rtAffected — no CIP fix yet (latest 4.19.325-cip136-rt50)