CVE-2026-89648: ceph: cap delegated inode count in ceph_parse_deleg_inos()

Published Sep 11, 2026
·
Updated

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

ceph: cap delegated inode count in cephparsedeleginos()

cephparsedeleginos() decodes interval sets of delegated inode numbers from an MDS create-with-delegation reply. For each set it reads a 64-bit start and a 64-bit len with cephdecode64safe(), which only validates that the eight bytes are present in the message, not the value, and then loops over len while inserting entries into sdelegatedinos.

len is fully attacker controlled. A malicious or compromised MDS can send one huge interval, many intervals in one reply, duplicate intervals, or repeated replies that accumulate delegated inodes on the same session. The original code bounded none of these and could spin the insert loop or grow the xarray without limit.

Bound both dimensions with a single enforcement point. Track the number of delegated inodes held by each MDS session in an atomic counter and grow it only in cephinsertdelegino(), which uses atomicaddunless() to refuse to push the count past CEPHMAXDELEGINOS. Because that helper is the only place the counter grows, the per-session population can never exceed the cap, so no separate per-session pre-check is needed. The counter is decremented when async create consumes a delegated inode or when an insert fails, incremented when a delegated inode is restored, initialized with the session xarray, and reset when reconnect destroys the xarray.

A per-session cap alone still lets one reply spin the insert loop on duplicate ranges without growing the counter, so also cap the aggregate interval length accepted from a single reply. Together these bound both the loop trip count per reply and the xarray population across replies.

The cap is a fixed, client-chosen constant rather than a value derived from the MDS. mdsclientpreallocinos is a userspace MDS configuration option; it is never sent to the kernel client on the wire, and a server-supplied bound could not be trusted for a defensive limit in any case. The constant is set well above that option's documented default of 1000 (a generous multiple), so legitimate refill behavior is unaffected while the CPU and xarray memory a malformed delegation stream can consume stays bounded.

Impact: a malicious or compromised Ceph MDS can no longer make a client spin through an unbounded delegated-inode interval or grow one session's delegated-inode xarray without limit.

Affected Software

1 affected component
ceph Linux kernel (Ceph client)

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade ceph (Linux kernel) to a version that resolves this vulnerability.

    Fixed in resolved

Event History

Sep 11, 2026
CVE Published
via MITRE·07:45 PM
Data Sourced
via MITRE·07:45 PM
Description

Frequently Asked Questions

1

Which deployments are exposed to this issue?

Linux kernel Ceph clients that process MDS create-with-delegation replies are exposed when the replying MDS is malicious or compromised. The affected parsing occurs on delegated inode intervals supplied by that MDS.

2

What can a malicious MDS do to trigger resource exhaustion?

It can provide a very large interval length, many intervals in one reply, duplicate intervals, or repeated replies. These inputs could make the client spend excessive time inserting inode entries or grow its delegated-inode xarray without limit.

3

How does the resolved code limit the impact?

The fix tracks delegated inode entries per MDS session and prevents the count from exceeding CEPH_MAX_DELEG_INOS. The counter is increased only during insertion, so repeated or oversized delegation data cannot grow the per-session population beyond that cap.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203