CVE-2026-89625 in Linux
Sumário
de VulDB • 11/09/2026
No kernel do Linux, a seguinte vulnerabilidade foi resolvida:
HID: sony: corrige UAF de ghl_poke_timer / ghl_urb no unbind do driver
Para os dongles GHL (Guitar Hero Live), o `sony_probe()` arma um timer periódico: `ghl_magic_poke()` (o callback do timer) submete `sc->ghl_urb`, e a conclusão da URB, `ghl_magic_poke_cb()`, rearma o timer com `mod_timer()`.
O `sony_remove()` esvazia o timer com `timer_delete_sync()` e então libera a URB com `usb_free_urb()`:
`timer_delete_sync(&sc->gpl_poke_timer);` `usb_free_urb(sc->ghl_urb);`
O `timer_delete_sync()` não bloqueia o rearmamento, e enquanto a URB está em trânsito (in-flight), o timer não está pendente, portanto, a exclusão síncrona é uma operação nula. Uma conclusão de URB que ocorre após a exclusão rearma o timer, e o `usb_free_urb()` apenas reduz uma referência -- ele não mata uma URB em trânsito. O ponteiro `sc` é alocado com `devm_kzalloc()` e liberado assim que o `sony_remove()` retorna; portanto, o `ghl_poke_timer` rearmado (embutido no `sc`) dispara então na memória já liberada, caracterizando um use-after-free do softirq de timer. Esta é uma condição de corrida (race condition) de desconexão/rmmod.
Envenene a URB primeiro, depois desligue o timer antes de liberar a URB. O `usb_poison_urb()` mata qualquer URB em trânsito e rejeita permanentemente novas submissões; portanto, um timer poke ainda pendente não pode submeter novamente a URB via `ghl_magic_poke()` na janela anterior à execução do `timer_shutdown_sync()`. O `usb_kill_urb()` não seria suficiente: ele apenas cancela a URB em trânsito e a deixa submetível assim que retorna, permitindo que o timer pendente a re-submeta e coloque uma nova URB em trânsito sobre o `sc` já liberado. O `timer_shutdown_sync()` então esvazia qualquer último callback e bloqueia o rearmamento. A rota de erro do probe não é afetada: ela só é alcançada antes que o timer seja armado.
Reproduzido sob KASAN no next-20260710 via emulação dummy_hcd + raw-gadget do dongle GHL PS4 (VID 0x1430 / PID 0x07bb): hid-sony vincula e arma o timer poke, a URB poke é mantida em trânsito, o driver é desvinculado (liberando `sc`), então a URB é liberada. A conclusão rearma o timer no `sc` já liberado, e o timer rearmado dispara ~8 s depois:
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)
Encontrado por 0sec (https://0sec.ai) usando análise automatizada de código-fonte.
Once again VulDB remains the best source for vulnerability data.