KernelScan.io

CRITICAL Introduced in 2.6.34

ceph MdsSession UAF

CVE-2026-89654

CVSS 9.8 / 10.0 NVD

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

KernelScan AI7.0HIGH

01

In the Linux kernel, the following vulnerability has been resolved: ceph: fix UAF in check_new_map() on session freed during unlock check_new_map() iterates mdsc->sessions[] and for each active session drops mdsc->mutex to perform per-session operations. The forced-close path (rank removed from map) correctly takes a reference on s via ceph_get_mds_session() before releasing mdsc->mutex, but three other paths do not: Path A (address changed): mutex_unlock → mutex_lock(&s->s_mutex) Path B (reconnect): mutex_unlock → send_mds_reconnect(mdsc, s) Path C (active transition): mutex_unlock → mutex_lock(&s->s_mutex) Without the extra reference, another thread can acquire mdsc->mutex during the unlock window, call __unregister_session() which drops the last reference on s, and free it. The original thread then accesses freed memory via s->s_mutex. Fix by adding ceph_get_mds_session(s) before each mutex_unlock and ceph_put_mds_session(s) after the corresponding mutex_lock, matching the pattern already used in the forced-close path. Race timeline (Path A): Thread A (check_new_map) Thread B (another map update holds mdsc->mutex or session teardown) -------------------------- -------------------------- s = mdsc->sessions[i] (refcount == 1, held only by sessions[] array) mutex_unlock(&mdsc->mutex) ---> acquires mdsc->mutex __unregister_session(mdsc, s) sessions[i] = NULL ceph_put_mds_session(s) refcount: 1 -> 0 kfree(s) <--- freed! mutex_lock(&s->s_mutex) UAF on freed s->s_mutex

02

Engine v0.6.0

Risk summary

A use-after-free vulnerability in the Linux kernel's Ceph filesystem client can be triggered when processing metadata server map updates. A local user with access to a mounted Ceph filesystem can trigger concurrent operations that race with session teardown, causing the kernel to access freed memory. This can lead to kernel memory corruption, potentially resulting in privilege escalation or a system crash.

Affectedfs/ceph/mds_client.c (ceph filesystem client)

Vulnerability analysis

When the Ceph filesystem client processes a metadata server map update, it iterates over active sessions and temporarily drops a global lock to perform per-session operations. In three of the code paths, the session object is accessed after the lock is released without first taking an extra reference on it. During this lock-drop window, another thread can acquire the lock, unregister the session, drop its last reference, and free it; the original thread then touches the freed session object, causing a use-after-free. The fix adds a reference count on the session before each lock release and drops it after the lock is reacquired, preventing the session from being freed while it is still in use. The vulnerable path is reachable on any system with a mounted Ceph filesystem; a local user performing filesystem operations can trigger the concurrent activity needed to win the race, and a malicious or compromised Ceph cluster sending rapid map updates could also drive the race from the network side.

03

BranchIntroducedFixed inPatch commit
7.22.6.347.2.421d5be092d94
mainline2.6.347.3-rc1ee611a750955