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
6.124.76.12.1093bf7dba8dba9
5.154.75.15.2210c4bcc3ba729
6.14.76.1.18855a06b32438c
6.184.76.18.5058c2d3e954c1
7.24.77.2.4332c444f4dc6
mainline4.77.3-rc1a3eb169ee297
6.64.76.6.157eb3e1a1cb163