<?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:32:33 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-64560 — posix-cpu-timers: Prevent UAF caused by non-leader exec() race</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-64560</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Linux, Siemens SIMATIC S7-1500 CPU 1518-4 PN/DP MFP, Siemens SIMATIC S7-1500 CPU 1518F-4 PN/DP MFP, Siemens SIPLUS S7-1500 CPU 1518-4 PN/DP MFP&lt;/p&gt;
&lt;p&gt;In the Linux kernel, the following vulnerability has been resolved:&lt;/p&gt;
&lt;p&gt;posix-cpu-timers: Prevent UAF caused by non-leader exec() race&lt;/p&gt;
&lt;p&gt;Wongi and Jungwoo decoded and reported a non-leader exec() related race
which can result in an UAF:&lt;/p&gt;
&lt;p&gt;sys_timer_delete()			exec()
   posix_cpu_timer_del()
   // Observes old leader
   p = pid_task(pid, pid_type);		de_thread()
   					  switch_leader();
					  release_task(old_leader)
					    __exit_signal(old_leader)
					      sighand = lock(old_leader, sighand);
					      posix_cpu_timers*_exit();
   sighand = lock_task_sighand(p)	      unhash_task(old_leader);
     sh = lock(p, sighand)	    	      old_leader-&amp;gt;sighand = NULL;
					      unlock(sighand);
     (p-&amp;gt;sighand == NULL)
	unlock(sh)
	return NULL;&lt;/p&gt;
&lt;p&gt;// Returns without action
   if(!sighand)
      return 0;
   free_posix_timer();&lt;/p&gt;
&lt;p&gt;This is &amp;#34;harmless&amp;#34; unless the deleted timer was armed and enqueued in
p-&amp;gt;signal because on exec() a TGID targeted timer is inherited.&lt;/p&gt;
&lt;p&gt;As sys_timer_delete() freed the underlying posix timer object
run_posix_cpu_timers() or any timerqueue related add/delete operations on
other timers will access the freed object&amp;#39;s timerqueue node, which results
in an UAF.&lt;/p&gt;
&lt;p&gt;There is a similar problem vs. posix_cpu_timer_set(). For regular posix
timers it just transiently returns -ESRCH to user space, but for the use
case in do_cpu_nanosleep() it&amp;#39;s the same UAF just that the k_itimer is
allocated on the stack.&lt;/p&gt;
&lt;p&gt;Also posix_cpu_timer_rearm() fails to rearm the timer, which mean…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Linux, Siemens SIMATIC S7-1500 CPU 1518-4 PN/DP MFP, Siemens SIMATIC S7-1500 CPU 1518F-4 PN/DP MFP, Siemens SIPLUS S7-1500 CPU 1518-4 PN/DP MFP&lt;/p&gt;
&lt;p&gt;In the Linux kernel, the following vulnerability has been resolved:&lt;/p&gt;
&lt;p&gt;posix-cpu-timers: Prevent UAF caused by non-leader exec() race&lt;/p&gt;
&lt;p&gt;Wongi and Jungwoo decoded and reported a non-leader exec() related race
which can result in an UAF:&lt;/p&gt;
&lt;p&gt;sys_timer_delete()			exec()
   posix_cpu_timer_del()
   // Observes old leader
   p = pid_task(pid, pid_type);		de_thread()
   					  switch_leader();
					  release_task(old_leader)
					    __exit_signal(old_leader)
					      sighand = lock(old_leader, sighand);
					      posix_cpu_timers*_exit();
   sighand = lock_task_sighand(p)	      unhash_task(old_leader);
     sh = lock(p, sighand)	    	      old_leader-&amp;gt;sighand = NULL;
					      unlock(sighand);
     (p-&amp;gt;sighand == NULL)
	unlock(sh)
	return NULL;&lt;/p&gt;
&lt;p&gt;// Returns without action
   if(!sighand)
      return 0;
   free_posix_timer();&lt;/p&gt;
&lt;p&gt;This is &amp;#34;harmless&amp;#34; unless the deleted timer was armed and enqueued in
p-&amp;gt;signal because on exec() a TGID targeted timer is inherited.&lt;/p&gt;
&lt;p&gt;As sys_timer_delete() freed the underlying posix timer object
run_posix_cpu_timers() or any timerqueue related add/delete operations on
other timers will access the freed object&amp;#39;s timerqueue node, which results
in an UAF.&lt;/p&gt;
&lt;p&gt;There is a similar problem vs. posix_cpu_timer_set(). For regular posix
timers it just transiently returns -ESRCH to user space, but for the use
case in do_cpu_nanosleep() it&amp;#39;s the same UAF just that the k_itimer is
allocated on the stack.&lt;/p&gt;
&lt;p&gt;Also posix_cpu_timer_rearm() fails to rearm the timer, which mean…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-64560</guid>
    </item>
  </channel>
</rss>
