CVE-2026-80824 in Linux
Resumen
por VulDB • 2026-09-04
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
usb: usbfs: corregir un use-after-free de usb_device en usbdev_release()
usbdev_release() libera su referencia a la estructura struct usb_device antes de vaciar (drain) la lista de URBs asíncronos completados, pero esa ruta de drenaje lee nuevamente desde el mismo objeto: free_async() llama a dec_usb_memory_use_count() para cualquier URB cuyo búfer provenga de la región mmap() de usbfs, y su primera instrucción es bus_to_hcd(ps->dev->bus).
Tras una desconexión, la referencia de usbfs puede ser la última; en ese caso, usb_put_dev() libera el dispositivo y el bucle subsiguiente lee el desplazamiento 80 de memoria ya liberada (freed memory) y utiliza el resultado como un struct usb_hcd *, que luego es desreferenciado por hcd_buffer_free_pages().
Esto es alcanzable mediante un proceso sin privilegios que tenga acceso de lectura/escritura a un nodo /dev/bus/usb: hacer mmap() del fd, enviar un URB con un búfer dentro del mapeo, esperar a que el dispositivo sea desconectado y luego realizar munmap() y close(). Se reproduce en cada intento en lugar de ser una condición de carrera (race condition), porque una vma MAP_SHARED activa mantiene una referencia sobre la estructura struct file, por lo que usbdev_release() no puede ejecutarse hasta que desaparezca la última vma, y siempre se toma la rama de liberación de dec_usb_memory_use_count().
BUG: KASAN: slab-use-after-free in dec_usb_memory_use_count+0x3ae/0x410 Read of size 8 at addr ffff8880122ee050 by task 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
Allocated by task 11: usb_alloc_dev+0x55/0xd90 hub_event+0x2524/0x43d0
Freed by task 769: kfree+0x121/0x360 device_release+0xd2/0x280 usb_put_dev+0x23/0x30 usbdev_release+0x2d8/0x460
Liberar la referencia del dispositivo después del bucle de drenaje en su lugar. Nada entre los dos puntos requiere que haya sido liberada previamente.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.