<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://vulnerability.circl.lu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Tue, 29 Sep 2026 05:35:31 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-89654 — ceph: fix UAF in check_new_map() on session freed during unlock</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-89654</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Linux&lt;/p&gt;
&lt;p&gt;In the Linux kernel, the following vulnerability has been resolved:&lt;/p&gt;
&lt;p&gt;ceph: fix UAF in check_new_map() on session freed during unlock&lt;/p&gt;
&lt;p&gt;check_new_map() iterates mdsc-&amp;gt;sessions[] and for each active session
drops mdsc-&amp;gt;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-&amp;gt;mutex, but three other
paths do not:&lt;/p&gt;
&lt;p&gt;Path A (address changed):  mutex_unlock → mutex_lock(&amp;amp;s-&amp;gt;s_mutex)
  Path B (reconnect):        mutex_unlock → send_mds_reconnect(mdsc, s)
  Path C (active transition): mutex_unlock → mutex_lock(&amp;amp;s-&amp;gt;s_mutex)&lt;/p&gt;
&lt;p&gt;Without the extra reference, another thread can acquire mdsc-&amp;gt;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-&amp;gt;s_mutex.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Race timeline (Path A):&lt;/p&gt;
&lt;p&gt;Thread A (check_new_map)             Thread B (another map update
    holds mdsc-&amp;gt;mutex                      or session teardown)
  --------------------------           --------------------------
  s = mdsc-&amp;gt;sessions[i]
  (refcount == 1, held only by
   sessions[] array)&lt;/p&gt;
&lt;p&gt;mutex_unlock(&amp;amp;mdsc-&amp;gt;mutex)
                               ---&amp;gt;    acquires mdsc-&amp;gt;mutex
                                       __unregiste…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Linux&lt;/p&gt;
&lt;p&gt;In the Linux kernel, the following vulnerability has been resolved:&lt;/p&gt;
&lt;p&gt;ceph: fix UAF in check_new_map() on session freed during unlock&lt;/p&gt;
&lt;p&gt;check_new_map() iterates mdsc-&amp;gt;sessions[] and for each active session
drops mdsc-&amp;gt;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-&amp;gt;mutex, but three other
paths do not:&lt;/p&gt;
&lt;p&gt;Path A (address changed):  mutex_unlock → mutex_lock(&amp;amp;s-&amp;gt;s_mutex)
  Path B (reconnect):        mutex_unlock → send_mds_reconnect(mdsc, s)
  Path C (active transition): mutex_unlock → mutex_lock(&amp;amp;s-&amp;gt;s_mutex)&lt;/p&gt;
&lt;p&gt;Without the extra reference, another thread can acquire mdsc-&amp;gt;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-&amp;gt;s_mutex.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Race timeline (Path A):&lt;/p&gt;
&lt;p&gt;Thread A (check_new_map)             Thread B (another map update
    holds mdsc-&amp;gt;mutex                      or session teardown)
  --------------------------           --------------------------
  s = mdsc-&amp;gt;sessions[i]
  (refcount == 1, held only by
   sessions[] array)&lt;/p&gt;
&lt;p&gt;mutex_unlock(&amp;amp;mdsc-&amp;gt;mutex)
                               ---&amp;gt;    acquires mdsc-&amp;gt;mutex
                                       __unregiste…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-89654</guid>
    </item>
  </channel>
</rss>
