Skip to main content
VulnerabilityPublished Updated

CVE-2026-89654: Linux kernel · ceph: fix UAF in check_new_map() on session freed during unlock

Affects Linux kernelSource CVE Database V5

0

Not known to be exploited · CVSS 9.8 Critical · fixed in ee611a7509554c4ca1f54f6aefe592fb1df7ea70 : patch Linux kernel as a priority.

Data as of 26 Oct 2026, 13:47 UTC

CVSS 3.1 base score
9.8Critical
How severe the flaw is on the 0–10 CVSS scale.
EPSS
0.6% chance of exploitation in 30 days – higher than 51% of CVEsExploit Prediction Scoring System: the likelihood attackers will use this flaw soon.
CISA SSVC
Exploitation
No evidence of active exploitation and no public proof of concept
Automatable
Attackers can reliably automate steps 1–4 of the kill chain
Technical impact
Total control over the software or total information disclosure

CISA SSVC assessment, 2026-10-16.

Patch
Available – fixed in ee611a7509554c4ca1f54f6aefe592fb1df7ea70, 820871e9dbeecd2533c4c5f5d91878ceaf02324c, 9646dfee880730aae4b379a4b8ee6c88ac735acd +2
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

Exploitation evidence

  1. Disclosed: evidence found.

    CVE published 11 Sep 2026

  2. Detectable: no evidence on record.

    No public nuclei template indexed

  3. Weaponised: no evidence on record.

    No public exploit code indexed in Metasploit or Exploit-DB

  4. Exploited in the wild: no evidence on record.

    Not in CISA KEV and no source reports exploitation

  5. Observed by OffSeq Mirage: no evidence on record.

    No attack traffic recorded by OffSeq Mirage sensors

A missing step is not evidence of safety. Sources: cve.org (opens in a new tab), the Metasploit, Exploit-DB and nuclei-templates index as of 26 Oct 2026.

What to do

Upgrade to a fixed release listed under Affected software.

Affected software

ProductAffectedFixed in
LinuxLinuxAffected
  • ≥ 2f2dc053404febedc9c273452d9d518fb31fde72, < ee611a7509554c4ca1f54f6aefe592fb1df7ea70
Fixed in
  • ee611a7509554c4ca1f54f6aefe592fb1df7ea70
LinuxLinuxAffected
  • ≥ 2f2dc053404febedc9c273452d9d518fb31fde72, < 820871e9dbeecd2533c4c5f5d91878ceaf02324c
Fixed in
  • 820871e9dbeecd2533c4c5f5d91878ceaf02324c
LinuxLinuxAffected
  • ≥ 2f2dc053404febedc9c273452d9d518fb31fde72, < 9646dfee880730aae4b379a4b8ee6c88ac735acd
Fixed in
  • 9646dfee880730aae4b379a4b8ee6c88ac735acd
LinuxLinuxAffected
  • ≥ 2f2dc053404febedc9c273452d9d518fb31fde72, < 352a278d5a1965aae3f817ce5d24a67ee42d45d1
Fixed in
  • 352a278d5a1965aae3f817ce5d24a67ee42d45d1
LinuxLinuxAffected
  • ≥ 2f2dc053404febedc9c273452d9d518fb31fde72, < 21d5be092d947f8d83f76f7ebf3989e7e9230a98
Fixed in
  • 21d5be092d947f8d83f76f7ebf3989e7e9230a98
LinuxLinuxAffected
  • =2.6.34
Fixed in–

Description

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

References

Community reviews

Loading reviews…