Vulnerabilidad en kernel de Linux (CVE-2021-47272)
Gravedad CVSS v3.1:
MEDIA
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
21/05/2024
Última modificación:
30/04/2025
Descripción
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: usb: dwc3: gadget: Bail from dwc3_gadget_exit() si dwc->gadget es NULL. Existe un posible escenario en el que dwc3_gadget_init() puede fallar: durante durante el host -> modo periférico Cambie a dwc3_set_mode() y un controlador de dispositivo pendiente no se vincula. Luego, si el DRD sufre otro cambio de modo desde periférico->host, el dwc3_gadget_exit() resultante intentará hacer referencia a un puntero dwc->gadget no válido y colgante, así como llamar a dma_free_coherent() en punteros DMA no asignados. El escenario exacto se puede reproducir de la siguiente manera: - Iniciar DWC3 en modo periférico - Configurar el gadget ConfigFS con la instancia FunctionFS (o usar g_ffs) - Ejecutar la aplicación de espacio de usuario FunctionFS (abrir EP, escribir descriptores, etc.) - Vincular el controlador del gadget al UDC de DWC3 - Cambiar DWC3 al modo host => se llama a dwc3_gadget_exit(). usb_del_gadget() colocará la instancia del controlador ConfigFS en gadget_driver_pending_list - Detener la aplicación FunctionFS (cierra los archivos ep) - Cambiar DWC3 al modo periférico => dwc3_gadget_init() falla ya que usb_add_gadget() llama a check_pending_gadget_drivers() e intenta volver a vincular el UDC al El gadget ConfigFS pero falla con -19 (-ENODEV) porque la instancia FFS no está en estado FFS_ACTIVE (el espacio de usuario aún no se ha reabierto ni escrito los descriptores, es decir, desc_ready!=0). - Vuelva a cambiar DWC3 al modo host => se vuelve a llamar a dwc3_gadget_exit(), pero esta vez dwc->gadget no es válido. Aunque se puede argumentar que el espacio de usuario debe asumir la responsabilidad de garantizar que la aplicación FunctionFS esté lista antes de permitir que el controlador compuesto se vincule al UDC, no hacerlo no debería generar pánico por parte del controlador del kernel. Solucione este problema configurando dwc->gadget en NULL en la ruta de falla de dwc3_gadget_init() y agregue una marca a dwc3_gadget_exit() para salir del problema a menos que el puntero del gadget sea válido.
Impacto
Puntuación base 3.x
5.50
Gravedad 3.x
MEDIA
Productos y versiones vulnerables
CPE | Desde | Hasta |
---|---|---|
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.10 (incluyendo) | 5.10.44 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.11 (incluyendo) | 5.12.11 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:5.13:rc1:*:*:*:*:*:* | ||
cpe:2.3:o:linux:linux_kernel:5.13:rc2:*:*:*:*:*:* | ||
cpe:2.3:o:linux:linux_kernel:5.13:rc3:*:*:*:*:*:* | ||
cpe:2.3:o:linux:linux_kernel:5.13:rc4:*:*:*:*:*:* | ||
cpe:2.3:o:linux:linux_kernel:5.13:rc5:*:*:*:*:*:* |
Para consultar la lista completa de nombres de CPE con productos y versiones, ver esta página
Referencias a soluciones, herramientas e información
- https://git.kernel.org/stable/c/03715ea2e3dbbc56947137ce3b4ac18a726b2f87
- https://git.kernel.org/stable/c/4aad390363d2b9b3e92428dd34d27bb7ea8f1ee8
- https://git.kernel.org/stable/c/851dee5a5da56564a70290713aee665403bb0b24
- https://git.kernel.org/stable/c/03715ea2e3dbbc56947137ce3b4ac18a726b2f87
- https://git.kernel.org/stable/c/4aad390363d2b9b3e92428dd34d27bb7ea8f1ee8
- https://git.kernel.org/stable/c/851dee5a5da56564a70290713aee665403bb0b24