Vulnerabilidad en kernel de Linux (CVE-2024-39501)
Gravedad:
Pendiente de análisis
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
12/07/2024
Última modificación:
10/05/2025
Descripción
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: drivers: core: sincronizar Actually_probe() y dev_uevent() Sincronizar el uso dev->driver en Actually_probe() y dev_uevent(). Estos pueden ejecutarse en diferentes subprocesos, lo que puede resultar en la siguiente condición de ejecución para dev->desinicialización del controlador: Subproceso n.° 1: ========== reality_probe() { ... probe_failed: ... device_unbind_cleanup( dev) { ... dev->controlador = NULL; // <= La sonda fallida establece dev->driver en NULL ... } ... } Hilo #2: ========== dev_uevent() { ... if (dev->driver) / / Si dev->driver recibe un valor NULL desde reality_probe() de ahora en adelante, // después de la verificación anterior, el sistema falla add_uevent_var(env, "DRIVER=%s", dev->driver->name); ... }realmente_probe() ya tiene el bloqueo. Entonces no es necesario hacer nada allí. A menudo también se llama a dev_uevent() con el bloqueo mantenido. Pero no siempre. Lo que implica que no podemos agregar ningún bloqueo en el propio dev_uevent(). Así que arregle esta ejecución agregando el candado al camino no protegido. Esta es la ruta donde se observa la ejecución anterior: dev_uevent+0x235/0x380 uevent_show+0x10c/0x1f0 <= Agregar bloqueo aquí dev_attr_show+0x3a/0xa0 sysfs_kf_seq_show+0x17c/0x250 kernfs_seq_show+0x7c/0x90 seq_read_iter+0x2d7/ 0x940 kernfs_fop_read_iter+0xc6/0x310 vfs_read+0x5bc/0x6b0 ksys_read+0xeb/0x1b0 __x64_sys_read+0x42/0x50 x64_sys_call+0x27ad/0x2d30 do_syscall_64+0xcd/0x1d0 Entry_SYSCALL_64_after_hwframe+0x77/0x7f Casos similares son reportados por syzkaller en https://syzkaller.appspot.com/bug?extid =ffa8143439596313a85a Pero estos se refieren a la *inicialización* de dev->driver dev->driver = drv; Como esto cambia dev->driver a no NULL, estos informes pueden considerarse falsos positivos (aunque esté commit también debería "solucionarlos"). El mismo problema se informó y se intentó solucionar en 2015 en https://lore.kernel.org/lkml/1421259054-2574-1-git-send-email-a.sangwan@samsung.com/ ya.
Impacto
Referencias a soluciones, herramientas e información
- https://git.kernel.org/stable/c/08891eeaa97c079b7f95d60b62dcf0e3ce034b69
- https://git.kernel.org/stable/c/13d25e82b6d00d743c7961dcb260329f86bedf7c
- https://git.kernel.org/stable/c/760603e30bf19d7b4c28e9d81f18b54fa3b745ad
- https://git.kernel.org/stable/c/95d03d369ea647b89e950667f1c3363ea6f564e6
- https://git.kernel.org/stable/c/a42b0060d6ff2f7e59290a26d5f162a3c6329b90
- https://git.kernel.org/stable/c/bb3641a5831789d83a58a39ed4a928bcbece7080
- https://git.kernel.org/stable/c/c0a40097f0bc81deafc15f9195d1fb54595cd6d0
- https://git.kernel.org/stable/c/ec772ed7cb21b46fb132f89241682553efd0b721



