<?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 11:35:31 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-89625 — HID: sony: fix UAF of ghl_poke_timer / ghl_urb at driver unbind</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-89625</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;HID: sony: fix UAF of ghl_poke_timer / ghl_urb at driver unbind&lt;/p&gt;
&lt;p&gt;For GHL (Guitar Hero Live) dongles, sony_probe() arms a periodic timer:
ghl_magic_poke() (the timer callback) submits sc-&amp;gt;ghl_urb, and the URB
completion ghl_magic_poke_cb() re-arms the timer with mod_timer().&lt;/p&gt;
&lt;p&gt;sony_remove() drained the timer with timer_delete_sync() and then freed
the URB with usb_free_urb():&lt;/p&gt;
&lt;p&gt;timer_delete_sync(&amp;amp;sc-&amp;gt;ghl_poke_timer);
	usb_free_urb(sc-&amp;gt;ghl_urb);&lt;/p&gt;
&lt;p&gt;timer_delete_sync() does not block re-arming, and while the URB is in
flight the timer is not pending, so the sync delete is a no-op. A URB
completion that runs after the delete re-arms the timer, and usb_free_urb()
only drops a reference -- it does not kill an in-flight URB. sc is
allocated with devm_kzalloc() and freed once sony_remove() returns, so the
re-armed ghl_poke_timer (embedded in sc) then fires on freed memory, a
use-after-free from timer softirq. This is a disconnect/rmmod race.&lt;/p&gt;
&lt;p&gt;Poison the URB first, then shut the timer down, before freeing the URB.
usb_poison_urb() kills any in-flight URB and permanently rejects further
submissions, so a poke timer that is still pending cannot re-submit the
URB from ghl_magic_poke() in the window before timer_shutdown_sync() runs.
usb_kill_urb() would not suffice: it only cancels the in-flight URB and
leaves it submittable once it returns, so the pending timer could
re-submit it and put a fresh URB in flight over the fr…&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;HID: sony: fix UAF of ghl_poke_timer / ghl_urb at driver unbind&lt;/p&gt;
&lt;p&gt;For GHL (Guitar Hero Live) dongles, sony_probe() arms a periodic timer:
ghl_magic_poke() (the timer callback) submits sc-&amp;gt;ghl_urb, and the URB
completion ghl_magic_poke_cb() re-arms the timer with mod_timer().&lt;/p&gt;
&lt;p&gt;sony_remove() drained the timer with timer_delete_sync() and then freed
the URB with usb_free_urb():&lt;/p&gt;
&lt;p&gt;timer_delete_sync(&amp;amp;sc-&amp;gt;ghl_poke_timer);
	usb_free_urb(sc-&amp;gt;ghl_urb);&lt;/p&gt;
&lt;p&gt;timer_delete_sync() does not block re-arming, and while the URB is in
flight the timer is not pending, so the sync delete is a no-op. A URB
completion that runs after the delete re-arms the timer, and usb_free_urb()
only drops a reference -- it does not kill an in-flight URB. sc is
allocated with devm_kzalloc() and freed once sony_remove() returns, so the
re-armed ghl_poke_timer (embedded in sc) then fires on freed memory, a
use-after-free from timer softirq. This is a disconnect/rmmod race.&lt;/p&gt;
&lt;p&gt;Poison the URB first, then shut the timer down, before freeing the URB.
usb_poison_urb() kills any in-flight URB and permanently rejects further
submissions, so a poke timer that is still pending cannot re-submit the
URB from ghl_magic_poke() in the window before timer_shutdown_sync() runs.
usb_kill_urb() would not suffice: it only cancels the in-flight URB and
leaves it submittable once it returns, so the pending timer could
re-submit it and put a fresh URB in flight over the fr…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-89625</guid>
    </item>
  </channel>
</rss>
