PT-2026-90341 · Linux · Linux

CVE-2026-89625

·

Published

2026-09-11

·

Updated

2026-09-11

None

No severity ratings or metrics are available. When they are, we'll update the corresponding info on the page.
In the Linux kernel, the following vulnerability has been resolved:
HID: sony: fix UAF of ghl poke timer / ghl urb at driver unbind
For GHL (Guitar Hero Live) dongles, sony probe() arms a periodic timer: ghl magic poke() (the timer callback) submits sc->ghl urb, and the URB completion ghl magic poke cb() re-arms the timer with mod timer().
sony remove() drained the timer with timer delete sync() and then freed the URB with usb free urb():
timer delete sync(&sc->ghl poke timer);
usb free urb(sc->ghl urb);
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.
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 freed sc. timer shutdown sync() then drains any last callback and blocks re-arming. The probe error path is unaffected: it is only reached before the timer is armed.
Reproduced under KASAN on next-20260710 via dummy hcd + raw-gadget emulation of the GHL PS4 dongle (VID 0x1430 / PID 0x07bb): hid-sony binds and arms the poke timer, the poke URB is held in flight, the driver is unbound (freeing sc), then the URB is released. The completion re-arms the timer on the freed sc, and the re-armed timer fires ~8 s later:
BUG: KASAN: slab-use-after-free in ghl magic poke+0x98/0xb0 Read of size 8 at addr ffff88810b02fd50 by task swapper/0/0 ghl magic poke+0x98/0xb0 call timer fn+0x35/0x2b0 run timers+0x69c/0x9a0 run timer softirq+0x173/0x2a0 Allocated by task 169: sony probe Freed by task 338: devres release group <- hid device remove (sony remove)
Found by 0sec (https://0sec.ai) using automated source analysis.
Found an issue in the description? Have something to add? Feel free to write us 👾

Related Identifiers

CVE-2026-89625

Affected Products

Linux