<?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>Thu, 01 Oct 2026 14:02:45 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-46106 — eventfs: Hold eventfs_mutex and SRCU when remount walks events</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-46106</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;eventfs: Hold eventfs_mutex and SRCU when remount walks events&lt;/p&gt;
&lt;p&gt;Commit 340f0c7067a9 (&amp;#34;eventfs: Update all the eventfs_inodes from the
events descriptor&amp;#34;) had eventfs_set_attrs() recurse through ei-&amp;gt;children
on remount.  The walk only holds the rcu_read_lock() taken by
tracefs_apply_options() over tracefs_inodes, which is wrong:&lt;/p&gt;
&lt;p&gt;- list_for_each_entry over ei-&amp;gt;children races with the list_del_rcu()
    in eventfs_remove_rec() -- LIST_POISON1 deref, same shape as
    d2603279c7d6.
  - eventfs_inodes are freed via call_srcu(&amp;amp;eventfs_srcu, ...).
    rcu_read_lock() does not extend an SRCU grace period, so ti-&amp;gt;private
    can be reclaimed under the walk.
  - The writes to ei-&amp;gt;attr race with eventfs_set_attr(), which holds
    eventfs_mutex.&lt;/p&gt;
&lt;p&gt;Reproducer:&lt;/p&gt;
&lt;p&gt;while :; do mount -o remount,uid=$((RANDOM%1000)) /sys/kernel/tracing; done &amp;amp;
  while :; do
      echo &amp;#34;p:kp submit_bio&amp;#34; &amp;gt; /sys/kernel/tracing/kprobe_events
      echo &amp;gt; /sys/kernel/tracing/kprobe_events
  done&lt;/p&gt;
&lt;p&gt;Wrap the events portion of tracefs_apply_options() in
eventfs_remount_lock()/_unlock() that take eventfs_mutex and
srcu_read_lock(&amp;amp;eventfs_srcu).  eventfs_set_attrs() doesn&amp;#39;t sleep so the
nested rcu_read_lock() is fine; lockdep_assert_held() pins the contract.&lt;/p&gt;
&lt;p&gt;Comment in tracefs_drop_inode() said &amp;#34;RCU cycle&amp;#34; -- it is SRCU.&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;eventfs: Hold eventfs_mutex and SRCU when remount walks events&lt;/p&gt;
&lt;p&gt;Commit 340f0c7067a9 (&amp;#34;eventfs: Update all the eventfs_inodes from the
events descriptor&amp;#34;) had eventfs_set_attrs() recurse through ei-&amp;gt;children
on remount.  The walk only holds the rcu_read_lock() taken by
tracefs_apply_options() over tracefs_inodes, which is wrong:&lt;/p&gt;
&lt;p&gt;- list_for_each_entry over ei-&amp;gt;children races with the list_del_rcu()
    in eventfs_remove_rec() -- LIST_POISON1 deref, same shape as
    d2603279c7d6.
  - eventfs_inodes are freed via call_srcu(&amp;amp;eventfs_srcu, ...).
    rcu_read_lock() does not extend an SRCU grace period, so ti-&amp;gt;private
    can be reclaimed under the walk.
  - The writes to ei-&amp;gt;attr race with eventfs_set_attr(), which holds
    eventfs_mutex.&lt;/p&gt;
&lt;p&gt;Reproducer:&lt;/p&gt;
&lt;p&gt;while :; do mount -o remount,uid=$((RANDOM%1000)) /sys/kernel/tracing; done &amp;amp;
  while :; do
      echo &amp;#34;p:kp submit_bio&amp;#34; &amp;gt; /sys/kernel/tracing/kprobe_events
      echo &amp;gt; /sys/kernel/tracing/kprobe_events
  done&lt;/p&gt;
&lt;p&gt;Wrap the events portion of tracefs_apply_options() in
eventfs_remount_lock()/_unlock() that take eventfs_mutex and
srcu_read_lock(&amp;amp;eventfs_srcu).  eventfs_set_attrs() doesn&amp;#39;t sleep so the
nested rcu_read_lock() is fine; lockdep_assert_held() pins the contract.&lt;/p&gt;
&lt;p&gt;Comment in tracefs_drop_inode() said &amp;#34;RCU cycle&amp;#34; -- it is SRCU.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-46106</guid>
    </item>
  </channel>
</rss>
