CVE-2026-99248 in Linux
Résumé
par VulDB • 03/11/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
i2c: xiic : restauration de la gestion d'alimentation (PM) en mode runtime non gérée pour corriger l'inondation des avertissements clk.
La conversion vers devres a remplacé les appels manuels à pm_runtime_enable()/disable() par devm_pm_runtime_set_active_enabled() et a supprimé le désamorçage du PM en mode runtime au moment de la suppression (remove). Le libération gérée met fin au PM en mode runtime dans un ordre incorrect : elle appelle pm_runtime_dont_use_autosuspend() avant pm_runtime_disable(), c'est-à-dire alors que le PM en mode runtime est encore activé, et comme devres fonctionne selon une logique LIFO (Last In First Out), la libération de devm_clk_get_enabled() s'exécute par la suite.
Lors du remove(), pm_runtime_put_sync() laisse l'appareil actif avec le timer d'autosuspend armé. La désactivation de use_autosuspend entraîne alors un appel immédiat à rpm_idle() pour suspendre l'appareil, et xiic_i2c_runtime_suspend() appelle clk_disable(). Par la suite, la libération devm_clk_get_enabled() effectue un clk_disable_unprepare() sur une horloge déjà désactivée, ce qui génère un avertissement (WARN) "clkN already disabled" à chaque opération de désamorçage.
Supprimer l'assistant géré et restaurer la configuration et le désamorçage du PM en mode runtime non gérés permet d'activer le PM en mode runtime une seule fois lors du probe, de le désactiver une seule fois lors du remove, et de maintenir un compte d'activation de l'horloge équilibré.
Ordonner correctement les opérations de désamorçage au moment du remove afin que le PM en mode runtime soit désactivé avant la diminution du compteur d'utilisation : utiliser pm_runtime_disable() suivi de pm_runtime_put_noidle(), et non pm_runtime_put_sync(). La réduction initiale du compteur avec l'autosuspend encore activée arme le timer d'autosuspend, et une préemption avant pm_runtime_disable() permet son expiration, ce qui suspend l'appareil et désactive l'horloge via clk_disable(); la libération devm tente alors de nouveau de désactiver l'horloge, provoquant à nouveau le WARN.
Restaurer également la demande d'interruption (IRQ) non gérée. Les chemins d'erreur du probe défont désormais manuellement le PM en mode runtime via des instructions goto, et un gestionnaire enregistré avec devm n'est libéré que plus tard lors de l'unwinding de devres ; il resterait donc actif pendant la désactivation manuelle (et durant toute étape future échouant ajoutée après lui). Demander l'IRQ avec request_threaded_irq() et la libérer explicitement dans le chemin d'erreur du probe ainsi qu'en cas de remove. Le chemin d'erreur du probe efface également use_autosuspend, afin de correspondre au désamorçage effectué lors du remove.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.