Get a Demo

Let's Patch It!

Book a short call with one our specialists, we'll walk you through how Endor Patches work, and ask you a few questions about your environment (like your primary programming languages and repository management). We'll also send you an email right after you fill out the form, feel free to reply with any questions you have in advance!

CVE

DEBIAN-CVE-2026-89655

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 dr...
Back to all
CVE

DEBIAN-CVE-2026-89655

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 dr...

In the Linux kernel, the following vulnerability has been resolved:  ceph: fix UAF in kickflushingcaps() on cf entry freed during unlock  listforeachentry() iterates ci->icapflushlist but drops icephlock to send cap messages.  During the unlock window, handlecapflushack() can acquire icephlock, detach cf entries with tid <= flushtid from the list, release icephlock, and free them via cephfreecapflush() outside any lock.  When the original thread reacquires icephlock and the for-loop macro advances via cf = listnextentry(cf, ilist), it dereferences cf->ilist.next on freed memory.  The race timeline:    kickflushingcaps()              handlecapflushack()   -----------------------             -----------------------   holds icephlock        <---   iterates to cf (tid=10)   prepares FLUSH message   drops icephlock        <---   sendcap() ── FLUSH(tid=10)                               MDS sends FLUSHACK(tid=10)                            --->       acquires icephlock                                       cf->tid(10) <= flushtid(10),                                       detaches cf from icapflushlist                                       drops icephlock                                       cephfreecapflush(cf) <- frees it!   acquires icephlock     <---   for-loop advances:     cf = listnextentry(cf, ilist)       -- UAF on freed cf->ilist.next  The cf was just sent by kickflushingcaps itself via sendcap(). The MDS may respond with FLUSHACK quickly enough that handlecapflushack() frees cf before _kickflushingcaps can finish the iteration.  Fix by converting to a manual while loop: save the next pointer under iceph_lock before dropping it, then use the saved pointer after reacquiring, so the potentially-freed cf is never accessed again.

Package Versions Affected

Package Version
patch Availability
No items found.

Automatically patch vulnerabilities without upgrading

Fix Without Upgrading
Detect compatible fix
Apply safe remediation
Fix with a single pull request

CVSS Version

Severity
Base Score
CVSS Version
Score Vector
C
H
U
-
C
H
U
0
-
3.1
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
C
H
U
-

Related Resources

No items found.

References

https://security-tracker.debian.org/tracker/CVE-2026-89655

Severity

9.8

CVSS Score
0
10

Basic Information

Base CVSS
9.8
EPSS Probability
0%
EPSS Percentile
0%
Introduced Version
0
Fix Available
6.12.111-1,7.2.6-1,6.12.111-1~deb12u1

Fix Critical Vulnerabilities Instantly

Secure your app without upgrading.
Fix Without Upgrading