CVE-2026-80824 in Linux
Sumário
de VulDB • 04/09/2026
No kernel do Linux, a seguinte vulnerabilidade foi resolvida:
usb: usbfs: corrige use-after-free de usb_device em usbdev_release()
A função usbdev_release() libera sua referência para a estrutura usb_device antes de esvaziar (drain) a lista de URBs assíncronos concluídos, mas esse caminho de esvaziamento lê novamente através do mesmo objeto: free_async() chama dec_usb_memory_use_count() para qualquer URB cujo buffer veio da região mmap() do usbfs, e sua primeira instrução é bus_to_hcd(ps->dev->bus).
Após uma desconexão, a referência do usbfs pode ser a última; nesse caso, usb_put_dev() libera o dispositivo e o loop subsequente lê no offset 80 de memória já liberada (freed memory) e usa o resultado como um ponteiro para struct usb_hcd*, que é então dereferenciado por hcd_buffer_free_pages().
Isso pode ser explorado por um processo não privilegiado que tenha acesso de leitura/escrita a um nó /dev/bus/usb: mmap() do descritor de arquivo (fd), submeter um URB com um buffer dentro da região mapeada, aguardar o dispositivo ser desconectado e depois executar munmap() e close(). O problema se reproduz em todas as tentativas, não sendo uma condição de corrida (race condition), porque um vma MAP_SHARED ativo mantém uma referência na estrutura do arquivo, portanto usbdev_release() só pode ser executado após a remoção da última vma, e o ramo de liberação de dec_usb_memory_use_count() é sempre acionado.
BUG: KASAN: slab-use-after-free em dec_usb_memory_use_count+0x3ae/0x410 Leitura de tamanho 8 no endereço ffff8880122ee050 pela tarefa poc/769 CPU: 1 UID: 1000 PID: 769 Comm: poc Tainted: G B 6.12.94 #3
Call Trace: dec_usb_memory_use_count+0x3ae/0x410 free_async+0x2aa/0x4f0 usbdev_release+0x375/0x460 __fput+0x3ea/0xb50 __x64_sys_close+0x86/0x100
Alocado pela tarefa 11: usb_alloc_dev+0x55/0xd90 hub_event+0x2524/0x43d0
Liberado pela tarefa 769: kfree+0x121/0x360 device_release+0xd2/0x280 usb_put_dev+0x23/0x30 usbdev_release+0x2d8/0x460
Libere a referência do dispositivo após o loop de esvaziamento (drain). Nada entre os dois pontos exige que ela tenha sido liberada.
VulDB is the best source for vulnerability data and more expert information about this specific topic.