ZeroHour

CVE-2026-89655

moderate

Use-After-Free Race in Linux Kernel CephFS Cap Flushing

CVSS 3.1
9.8 critical
EPSS
Published
()
Modified
AI analysis

The Linux kernel's Ceph filesystem client contains a use-after-free in __kick_flushing_caps(): it iterates the inode's cap-flush list using list_for_each_entry() while dropping i_ceph_lock to send cap messages to the MDS. During that unlock window, a fast FLUSH_ACK from the metadata server lets handle_cap_flush_ack() free the very cap-flush entry the loop is about to dereference, corrupting freed kernel memory — a timing-dependent race that a malicious or compromised MDS could deliberately trigger by responding immediately. Successful exploitation most plausibly crashes the client kernel (denial of service), though memory corruption in kernel context carries broader risk and the flaw is scored CVSS 3.1 9.8 (C:H/I:H/A:H). Affected systems are hosts mounting CephFS with kernel builds containing the vulnerable iteration code; the CVE record does not enumerate specific version ranges. There is no known public proof of concept, the issue is not in CISA's KEV catalog, and no in-the-wild exploitation has been reported; the upstream fix saves the next list pointer under the lock before reusing it.

What to do: Patch first: install kernel updates from your distribution once they include the fs/ceph fix that saves the next list pointer under i_ceph_lock. If patching is delayed on CephFS client hosts, consider remounting filesystems with the userspace ceph-fuse client, which does not exercise the vulnerable kernel path. Monitor dmesg on CephFS-mounting hosts for ceph-related oopses or panics, especially under heavy metadata write load or after MDS leadership changes, and treat any unexplained crashes as possible indicators.

Affected
Linux kernel (CephFS client, fs/ceph)
Estimated exposure
moderate≈ tens of thousands of hosts mounting CephFS via the kernel client (order-of-magnitude estimate) — Ceph is deployed mainly in private enterprise/OpenStack/HPC/Proxmox storage clusters, and kernel CephFS mounts are not identifiable in internet-wide scans, so this estimate rests on deployment patterns rather than measured counts.

Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.

Description

In the Linux kernel, the following vulnerability has been resolved: ceph: fix UAF in __kick_flushing_caps() on cf entry freed during unlock list_for_each_entry() iterates ci->i_cap_flush_list but drops i_ceph_lock to send cap messages. During the unlock window, handle_cap_flush_ack() can acquire i_ceph_lock, detach cf entries with tid i_list.next on freed memory. The race timeline: __kick_flushing_caps() handle_cap_flush_ack() ----------------------- ----------------------- holds i_ceph_lock acquires i_ceph_lock cf->tid(10) i_list.next The cf was just sent by __kick_flushing_caps itself via __send_cap(). The MDS may respond with FLUSH_ACK quickly enough that handle_cap_flush_ack() frees cf before __kick_flushing_caps can finish the iteration. Fix by converting to a manual while loop: save the next pointer under i_ceph_lock before dropping it, then use the saved pointer after reacquiring, so the potentially-freed cf is never accessed again.

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

In the news

No ingested article mentions this CVE yet.