Vulnerabilidad en kernel de Linux (CVE-2024-36899)
Gravedad CVSS v3.1:
ALTA
Tipo:
CWE-362
Ejecución concurrente utilizando recursos compartidos con una incorrecta sincronización (Condición de carrera)
Fecha de publicación:
30/05/2024
Última modificación:
02/02/2025
Descripción
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: gpiolib: cdev: corrige el use after free en lineinfo_changed_notify El problema de use after free ocurre de la siguiente manera: cuando el archivo del dispositivo del chip GPIO se cierra al invocar gpio_chrdev_release(), las líneas vigiladas son liberado por bitmap_free(), pero la cancelación del registro de la cadena de notificador lineinfo_changed_nb falló debido a la espera de escritura de rwsem. Además, una de las líneas del chip GPIO también está en proceso de lanzamiento y contiene el rwsem de lectura de la cadena notificadora. En consecuencia, una condición de ejecución conduce al use after free de watched_lines. Aquí está la pila típica cuando ocurrió el problema: [free] gpio_chrdev_release() --> bitmap_free(cdev->watched_lines) <-- freed --> blocking_notifier_chain_unregister() --> down_write(&nh->rwsem) <-- waiting rwsem --> __down_write_common() --> rwsem_down_write_slowpath() --> schedule_preempt_disabled() --> schedule() [use] st54spi_gpio_dev_release() --> gpio_free() --> gpiod_free() --> gpiod_free_commit() --> gpiod_line_state_notify() --> blocking_notifier_call_chain() --> down_read(&nh->rwsem); <-- held rwsem --> notifier_call_chain() --> lineinfo_changed_notify() --> test_bit(xxxx, cdev->watched_lines) <-- use after free El efecto secundario del problema de use after free es que un GPIO El evento de línea se está generando para el espacio de usuario donde no debería. Sin embargo, dado que chrdev se cerrará, el espacio de usuario no tendrá la oportunidad de leer ese evento de todos modos. Para solucionar el problema, llame a la función bitmap_free() después de cancelar el registro de la cadena de notificadores lineinfo_changed_nb.
Impacto
Puntuación base 3.x
7.00
Gravedad 3.x
ALTA
Productos y versiones vulnerables
CPE | Desde | Hasta |
---|---|---|
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.7 (incluyendo) | 6.6.31 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.7 (incluyendo) | 6.8.10 (excluyendo) |
cpe:2.3:o:linux:linux_kernel:6.9:rc1:*:*:*:*:*:* | ||
cpe:2.3:o:linux:linux_kernel:6.9:rc2:*:*:*:*:*:* | ||
cpe:2.3:o:linux:linux_kernel:6.9:rc3:*:*:*:*:*:* | ||
cpe:2.3:o:linux:linux_kernel:6.9:rc4:*:*:*:*:*:* | ||
cpe:2.3:o:linux:linux_kernel:6.9:rc5:*:*:*:*:*:* | ||
cpe:2.3:o:linux:linux_kernel:6.9:rc6:*:*:*:*:*:* | ||
cpe:2.3:o:linux:linux_kernel:6.9:rc7:*:*:*:*:*:* |
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/02f6b0e1ec7e0e7d059dddc893645816552039da
- https://git.kernel.org/stable/c/2d008d4961b039d2edce8976289773961b7e5fb5
- https://git.kernel.org/stable/c/2dfbb920a89bdc58087672ad5325dc6c588b6860
- https://git.kernel.org/stable/c/95ca7c90eaf5ea8a8460536535101e3e81160e2a
- https://git.kernel.org/stable/c/ca710b5f40b8b16fdcad50bebd47f50e4c62d239
- https://git.kernel.org/stable/c/d38c49f7bdf14381270736299e2ff68ec248a017
- https://git.kernel.org/stable/c/02f6b0e1ec7e0e7d059dddc893645816552039da
- https://git.kernel.org/stable/c/95ca7c90eaf5ea8a8460536535101e3e81160e2a
- https://git.kernel.org/stable/c/ca710b5f40b8b16fdcad50bebd47f50e4c62d239