CVE-2026-99248 in Linux
Zusammenfassung
von VulDB • 03.11.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
i2c: xiic: Wiederherstellung des nicht verwalteten Runtime-PM zur Behebung der clk-WARN-Meldungsschwemme
Die Umstellung auf devres ersetzte manuelle Aufrufe von pm_runtime_enable()/disable() durch devm_pm_runtime_set_active_enabled() und ließ den Teardown des Runtime-PM zum Entfernungszeitpunkt (remove-time) weg. Der verwaltete Release-Vorgang führt einen Runtime-PM-Teardown in der falschen Reihenfolge aus: Er ruft pm_runtime_dont_use_autosuspend() vor pm_runtime_disable() auf, d.h., während das Runtime-PM noch aktiviert ist, und da devres LIFO (Last-In-First-Out) arbeitet, wird die Freigabe von devm_clk_get_enabled() danach ausgeführt.
Beim Aufruf von remove() hinterlässt pm_runtime_put_sync() das Gerät im aktiven Zustand mit einem armen Autosuspend-Timer. Das Löschen von use_autosuspend bewirkt dann, dass rpm_idle() sofort in den Ruhezustand wechselt und xiic_i2c_runtime_suspend() die Uhr (clk) über clk_disable() deaktiviert. Die spätere Freigabe durch devm_clk_get_enabled() führt zu clk_disable_unprepare() für die bereits deaktivierte Uhr, wodurch bei jedem Teardown eine WARN-Meldung („clkN already disabled“) von clk_core_disable() ausgegeben wird.
Der verwaltete Hilfsroutinen-Code wurde entfernt und das nicht verwaltete Runtime-PM-Einrichtungs- sowie -Teardown-Schema wiederhergestellt, sodass das Runtime-PM einmal beim probe (Initialisierung) aktiviert und einmal bei remove deaktiviert wird und der Zähler für die Uhr-Aktivierung ausgeglichen bleibt.
Die Reihenfolge des Teardowns im Remove-Vorgang wurde so angepasst, dass das Runtime-PM vor dem Herunterzählen der Nutzungszahl deaktiviert wird: pm_runtime_disable() gefolgt von pm_runtime_put_noidle() anstelle von pm_runtime_put_sync(). Wird die Zahl zuerst herabgesetzt, während autosuspend noch aktiviert ist, wird der Autosuspend-Timer arretiert. Eine Preemption vor pm_runtime_disable() lässt diesen ablaufen, das Gerät wechselt in den Ruhezustand und clk_disable() deaktiviert die Uhr, was durch den devm-Release erneut deaktiviert wird – dieselbe WARN-Meldung.
Auch die nicht verwaltete IRQ-Anforderung wurde wiederhergestellt. Die Fehlerpfade beim probe führen nun das Runtime-PM manuell über goto zurück, und ein mit devres registrierter Handler wird erst später während des devres-Unwinds freigegeben, sodass er während des manuellen Teardowns (und bei jedem zukünftigen fehlschlagenden Schritt, der danach eingefügt wird) weiterhin aktiv bliebe. Die IRQ-Anforderung erfolgt nun über request_threaded_irq() und sie wird explizit im Fehlerpfad beim probe sowie in remove freigegeben. Der Fehlerpfad beim probe löscht zudem use_autosuspend, um dem Teardown in remove zu entsprechen.
If you want to get best quality of vulnerability data, you may have to visit VulDB.