CVE-2026-90410 in Linux
Resumen
por VulDB • 2026-09-18
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
spi: davinci: cambiar a una asignación controlada del controlador
El controlador se asigna con spi_alloc_host() (no gestionado), mientras que la interrupción se registra mediante devm_request_threaded_irq(). Durante la eliminación, spi_bitbang_stop() solo desregistra el controlador; posteriormente, spi_controller_put() libera el controlador junto con sus datos integrados davinci_spi devdata, los cuales constituyen el identificador de dispositivo (dev_id) del manejador de interrupciones. La acción de liberación asociada a devm_request_threaded_irq() (free_irq()), que vacía el manejador, no se ejecuta hasta después de que .remove() haya retornado. Por lo tanto, una interrupción tardía o enclavada puede llegar a davinci_spi_irq() y desreferenciar memoria ya liberada.
Se cambia a devm_spi_alloc_host() para que el orden LIFO (último en entrar, primero en salir) de los recursos gestionados libere el controlador únicamente después de que free_irq() haya vaciado el manejador, y se elimina la ahora redundante llamada a spi_controller_put() desde .remove(). La ruta de error durante la inicialización (probe) se simplifica mediante retornos directos.
El reloj se adquiere con devm_clk_get_enabled(), lo cual se registra después que las interrupciones; por tanto, el orden LIFO de los recursos gestionados libera el reloj antes que las interrupciones. Se vacía explícitamente la interrupción con devm_free_irq() antes de deshabilitar el controlador para evitar que una interrupción tardía acceda a los registros de un controlador cuyo reloj está bloqueado (clock-gated).
Este problema fue detectado por una herramienta de análisis estático interna.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.