<?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>Wed, 30 Sep 2026 22:47:08 +0000</lastBuildDate>
    <item>
      <title>CVE-2024-39486 — drm/drm_file: Fix pid refcounting race</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2024-39486</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;drm/drm_file: Fix pid refcounting race&lt;/p&gt;
&lt;p&gt;&amp;lt;maarten.lankhorst@linux.intel.com&amp;gt;, Maxime Ripard
&amp;lt;mripard@kernel.org&amp;gt;, Thomas Zimmermann &amp;lt;tzimmermann@suse.de&amp;gt;&lt;/p&gt;
&lt;p&gt;filp-&amp;gt;pid is supposed to be a refcounted pointer; however, before this
patch, drm_file_update_pid() only increments the refcount of a struct
pid after storing a pointer to it in filp-&amp;gt;pid and dropping the
dev-&amp;gt;filelist_mutex, making the following race possible:&lt;/p&gt;
&lt;p&gt;process A               process B
=========               =========
                        begin drm_file_update_pid
                        mutex_lock(&amp;amp;dev-&amp;gt;filelist_mutex)
                        rcu_replace_pointer(filp-&amp;gt;pid, &amp;lt;pid B&amp;gt;, 1)
                        mutex_unlock(&amp;amp;dev-&amp;gt;filelist_mutex)
begin drm_file_update_pid
mutex_lock(&amp;amp;dev-&amp;gt;filelist_mutex)
rcu_replace_pointer(filp-&amp;gt;pid, &amp;lt;pid A&amp;gt;, 1)
mutex_unlock(&amp;amp;dev-&amp;gt;filelist_mutex)
get_pid(&amp;lt;pid A&amp;gt;)
synchronize_rcu()
put_pid(&amp;lt;pid B&amp;gt;)   *** pid B reaches refcount 0 and is freed here ***
                        get_pid(&amp;lt;pid B&amp;gt;)   *** UAF ***
                        synchronize_rcu()
                        put_pid(&amp;lt;pid A&amp;gt;)&lt;/p&gt;
&lt;p&gt;As far as I know, this race can only occur with CONFIG_PREEMPT_RCU=y
because it requires RCU to detect a quiescent state in code that is not
explicitly calling into the scheduler.&lt;/p&gt;
&lt;p&gt;This race leads to use-after-free of a &amp;#34;struct pid&amp;#34;.
It is probably somewhat hard to hit because process A has to pass
through a synchronize_rcu() ope…&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;drm/drm_file: Fix pid refcounting race&lt;/p&gt;
&lt;p&gt;&amp;lt;maarten.lankhorst@linux.intel.com&amp;gt;, Maxime Ripard
&amp;lt;mripard@kernel.org&amp;gt;, Thomas Zimmermann &amp;lt;tzimmermann@suse.de&amp;gt;&lt;/p&gt;
&lt;p&gt;filp-&amp;gt;pid is supposed to be a refcounted pointer; however, before this
patch, drm_file_update_pid() only increments the refcount of a struct
pid after storing a pointer to it in filp-&amp;gt;pid and dropping the
dev-&amp;gt;filelist_mutex, making the following race possible:&lt;/p&gt;
&lt;p&gt;process A               process B
=========               =========
                        begin drm_file_update_pid
                        mutex_lock(&amp;amp;dev-&amp;gt;filelist_mutex)
                        rcu_replace_pointer(filp-&amp;gt;pid, &amp;lt;pid B&amp;gt;, 1)
                        mutex_unlock(&amp;amp;dev-&amp;gt;filelist_mutex)
begin drm_file_update_pid
mutex_lock(&amp;amp;dev-&amp;gt;filelist_mutex)
rcu_replace_pointer(filp-&amp;gt;pid, &amp;lt;pid A&amp;gt;, 1)
mutex_unlock(&amp;amp;dev-&amp;gt;filelist_mutex)
get_pid(&amp;lt;pid A&amp;gt;)
synchronize_rcu()
put_pid(&amp;lt;pid B&amp;gt;)   *** pid B reaches refcount 0 and is freed here ***
                        get_pid(&amp;lt;pid B&amp;gt;)   *** UAF ***
                        synchronize_rcu()
                        put_pid(&amp;lt;pid A&amp;gt;)&lt;/p&gt;
&lt;p&gt;As far as I know, this race can only occur with CONFIG_PREEMPT_RCU=y
because it requires RCU to detect a quiescent state in code that is not
explicitly calling into the scheduler.&lt;/p&gt;
&lt;p&gt;This race leads to use-after-free of a &amp;#34;struct pid&amp;#34;.
It is probably somewhat hard to hit because process A has to pass
through a synchronize_rcu() ope…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2024-39486</guid>
    </item>
  </channel>
</rss>
