<?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 06:25:58 +0000</lastBuildDate>
    <item>
      <title>CVE-2024-43870 — perf: Fix event leak upon exit</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2024-43870</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;perf: Fix event leak upon exit&lt;/p&gt;
&lt;p&gt;When a task is scheduled out, pending sigtrap deliveries are deferred
to the target task upon resume to userspace via task_work.&lt;/p&gt;
&lt;p&gt;However failures while adding an event&amp;#39;s callback to the task_work
engine are ignored. And since the last call for events exit happen
after task work is eventually closed, there is a small window during
which pending sigtrap can be queued though ignored, leaking the event
refcount addition such as in the following scenario:&lt;/p&gt;
&lt;p&gt;TASK A
    -----&lt;/p&gt;
&lt;p&gt;do_exit()
       exit_task_work(tsk);&lt;/p&gt;
&lt;p&gt;&amp;lt;IRQ&amp;gt;
       perf_event_overflow()
          event-&amp;gt;pending_sigtrap = pending_id;
          irq_work_queue(&amp;amp;event-&amp;gt;pending_irq);
       &amp;lt;/IRQ&amp;gt;
    =========&amp;gt; PREEMPTION: TASK A -&amp;gt; TASK B
       event_sched_out()
          event-&amp;gt;pending_sigtrap = 0;
          atomic_long_inc_not_zero(&amp;amp;event-&amp;gt;refcount)
          // FAILS: task work has exited
          task_work_add(&amp;amp;event-&amp;gt;pending_task)
       [...]
       &amp;lt;IRQ WORK&amp;gt;
       perf_pending_irq()
          // early return: event-&amp;gt;oncpu = -1
       &amp;lt;/IRQ WORK&amp;gt;
       [...]
    =========&amp;gt; TASK B -&amp;gt; TASK A
       perf_event_exit_task(tsk)
          perf_event_exit_event()
             free_event()
                WARN(atomic_long_cmpxchg(&amp;amp;event-&amp;gt;refcount, 1, 0) != 1)
                // leak event due to unexpected refcount == 2&lt;/p&gt;
&lt;p&gt;As a result the event is never released while the task exits.&lt;/p&gt;
&lt;p&gt;Fix this with appropria…&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;perf: Fix event leak upon exit&lt;/p&gt;
&lt;p&gt;When a task is scheduled out, pending sigtrap deliveries are deferred
to the target task upon resume to userspace via task_work.&lt;/p&gt;
&lt;p&gt;However failures while adding an event&amp;#39;s callback to the task_work
engine are ignored. And since the last call for events exit happen
after task work is eventually closed, there is a small window during
which pending sigtrap can be queued though ignored, leaking the event
refcount addition such as in the following scenario:&lt;/p&gt;
&lt;p&gt;TASK A
    -----&lt;/p&gt;
&lt;p&gt;do_exit()
       exit_task_work(tsk);&lt;/p&gt;
&lt;p&gt;&amp;lt;IRQ&amp;gt;
       perf_event_overflow()
          event-&amp;gt;pending_sigtrap = pending_id;
          irq_work_queue(&amp;amp;event-&amp;gt;pending_irq);
       &amp;lt;/IRQ&amp;gt;
    =========&amp;gt; PREEMPTION: TASK A -&amp;gt; TASK B
       event_sched_out()
          event-&amp;gt;pending_sigtrap = 0;
          atomic_long_inc_not_zero(&amp;amp;event-&amp;gt;refcount)
          // FAILS: task work has exited
          task_work_add(&amp;amp;event-&amp;gt;pending_task)
       [...]
       &amp;lt;IRQ WORK&amp;gt;
       perf_pending_irq()
          // early return: event-&amp;gt;oncpu = -1
       &amp;lt;/IRQ WORK&amp;gt;
       [...]
    =========&amp;gt; TASK B -&amp;gt; TASK A
       perf_event_exit_task(tsk)
          perf_event_exit_event()
             free_event()
                WARN(atomic_long_cmpxchg(&amp;amp;event-&amp;gt;refcount, 1, 0) != 1)
                // leak event due to unexpected refcount == 2&lt;/p&gt;
&lt;p&gt;As a result the event is never released while the task exits.&lt;/p&gt;
&lt;p&gt;Fix this with appropria…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2024-43870</guid>
    </item>
  </channel>
</rss>
