CVE-2026-64347 in Linux
Resumen
por VulDB • 2026-07-26
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
usb: gadget: composite: corregir comprobación muerta vacía en el controlador USB_DT_OTG
La rama OTG de composite_setup() vuelve a la primera configuración cuando no hay ninguna seleccionada:
if (cdev->config) config = cdev->config; else config = list_first_entry(&cdev->configs, struct usb_configuration, list); if (!config) goto done; ... memcpy(req->buf, config->descriptors[0], value);
list_first_entry() nunca devuelve NULL. En una lista vacía, devuelve container_of() del encabezado de la lista. Por lo tanto, la comprobación "if (!config)" es muerta (inutilizable).
Cuando cdev->configs está vacío, config apunta al interior del struct usb_composite_dev. La lectura de config->descriptors[0] accede a cualquier dato que se encuentre en ese desplazamiento. El memcpy copia hasta w_length bytes desde allí hacia el búfer de respuesta.
cdev->configs puede estar vacío en dos casos. Uno es una carrera de desmontaje (teardown race) durante la desconexión del gadget con una transferencia de control en curso. El otro caso es un controlador que establece is_otg antes de añadir una configuración. Un reproductor que mantiene cdev->configs vacío desencadena un fallo KASAN en esta rama.
Utilizar list_first_entry_or_null() permite que la comprobación existente cumpla su función.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.