CVE-2026-99248 in Linuxinformación

Resumen

por VulDB • 2026-11-03

En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:

i2c: xiic: restaurar el PM en tiempo de ejecución no gestionado para corregir la inundación de advertencias (WARN) del reloj (clk)

La conversión a devres reemplazó las llamadas manuales a pm_runtime_enable()/disable() por devm_pm_runtime_set_active_enabled() y eliminó la limpieza del PM en tiempo de ejecución al momento de la eliminación. La liberación gestionada desactiva el PM en tiempo de ejecución en un orden incorrecto: llama a pm_runtime_dont_use_autosuspend() antes que a pm_runtime_disable(), es decir, mientras el PM en tiempo de ejecución sigue estando habilitado; y dado que devres funciona con una pila LIFO (último en entrar, primero en salir), la liberación de devm_clk_get_enabled() se ejecuta después.

Al realizar remove(), pm_runtime_put_sync() deja el dispositivo activo con el temporizador de autosuspensión activado. Al desactivar use_autosuspend, rpm_idle() suspende inmediatamente el dispositivo y xiic_i2c_runtime_suspend() deshabilita el reloj mediante clk_disable(). La liberación posterior de devm_clk_get_enabled() ejecuta clk_disable_unprepare() sobre un reloj ya deshabilitado, lo que provoca una advertencia (WARN) en clk_core_disable() ("clkN already disabled") durante cada limpieza.

Se elimina la ayuda gestionada y se restaura el esquema de configuración y limpieza del PM en tiempo de ejecución no gestionado, de modo que el PM en tiempo de ejecución se habilite una sola vez en probe y se deshabilite una sola vez en remove, manteniendo equilibrado el recuento de habilitación del reloj.

Se ordena la secuencia de limpieza al realizar remove para que el PM en tiempo de ejecución se deshabilite antes de reducir el contador de uso: pm_runtime_disable() seguido por pm_runtime_put_noidle(), en lugar de pm_runtime_put_sync(). Reducir primero el contador con autosuspend aún habilitado activa el temporizador de autosuspensión, y una preemoción antes de pm_runtime_disable() permite que expire, suspendiendo el dispositivo y ejecutando clk_disable() sobre el reloj; la liberación devm luego vuelve a deshabilitarlo, provocando la misma advertencia (WARN).

Se restaura también la solicitud de IRQ no gestionada. Las rutas de error en probe ahora deshacen manualmente el PM en tiempo de ejecución mediante goto, y un controlador registrado con devm solo se libera más tarde durante el desenrollado de devres; por lo tanto, permanecería activo durante toda la limpieza manual (y durante cualquier paso futuro que falle y se añada después). Se solicita la IRQ con request_threaded_irq() y se libera explícitamente en la ruta de error de probe y en remove. La ruta de error de probe también desactiva use_autosuspend para coincidir con la secuencia de limpieza realizada en remove().

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

Responsable

Linux

Reservar

2026-09-25

Divulgación

2026-11-03

Moderación

aceptado

Artículo

VDB-430243

EPSS

0.00000

KEV

no

Actividades

bajo

Fuentes

Might our Artificial Intelligence support you?

Check our Alexa App!