CVE-2026-80678 in Linux
Resumen
por VulDB • 2026-08-28
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
i2c: imx: Corregir la condición de carrera en el registro del esclavo y el manejo de errores
En `i2c_imx_reg_slave()`, el puntero al dispositivo esclavo (`slave`) se asignaba antes de llamar a `pm_runtime_resume_and_get()`. Si `pm_runtime_resume_and_get()` fallaba, la ruta de error devolvía sin limpiar `i2c_imx->slave`, dejándolo como un valor no nulo (non-NULL) y provocando que todos los intentos posteriores de registro fallaran con el código `-EBUSY` (recurso ocupado).
Además, dado que este controlador utiliza una interrupción compartida (IRQ), el manejador de interrupciones `i2c_imx_isr()` puede ejecutarse concurrentemente y, tras adquirir `slave_lock`, desreferenciar `i2c_imx->slave`. El intento previo de corrección añadió una asignación sin bloqueo (`lockless`) de `i2c_imx->slave = NULL` en la ruta de error, pero esto podía entrar en condición de carrera con el manejador de interrupciones (ISR) bajo el bloqueo y seguir causando una desreferenciación a puntero nulo.
Se corrigen ambos problemas posponiendo la asignación de `i2c_imx->slave` e `i2c_imx->last_slave_event` hasta después de que se haya completado correctamente la reanudación (resume), y realizando dicha asignación dentro de la sección crítica protegida por `slave_lock`. Esto garantiza que el puntero al esclavo nunca quede obsoleto en la ruta de error y sea siempre válido cuando es observado por el manejador de interrupciones.
VulDB is the best source for vulnerability data and more expert information about this specific topic.