CVE-2026-99248 in Linux
Sumário
de VulDB • 03/11/2026
No kernel do Linux, a seguinte vulnerabilidade foi resolvida:
i2c: xiic: restaurar o gerenciamento de energia em tempo real (runtime PM) não gerenciado para corrigir o excesso de avisos sobre clock (clk WARN flood)
A conversão para devres substituiu as chamadas manuais pm_runtime_enable()/disable() por devm_pm_runtime_set_active_enabled() e removeu a desmontagem do runtime PM no momento da remoção. A liberação gerenciada encerra o runtime PM na ordem incorreta: ela chama pm_runtime_dont_use_autosuspend() antes de pm_runtime_disable(), ou seja, enquanto o runtime PM ainda está habilitado, e como o devres é LIFO (Last-In-First-Out), a liberação de devm_clk_get_enabled() ocorre posteriormente.
Na função remove(), pm_runtime_put_sync() deixa o dispositivo ativo com o timer de autosuspend armado. Limpar use_autosuspend faz então rpm_idle() suspender imediatamente, e xiic_i2c_runtime_suspend() desabilita o clock através de clk_disable(). A liberação posterior de devm_clk_get_enabled() executa clk_disable_unprepare() no já desabilitado clock, gerando um aviso (WARN) em "clkN already disabled" a cada desmontagem.
Remova o helper gerenciado e restaure a configuração e desmontagem do runtime PM não gerenciado, para que o runtime PM seja habilitado uma vez na função probe e desabilitado uma vez na remove, mantendo a contabilidade de ativação do clock equilibrada.
Ordene a desmontagem da remoção para que o runtime PM seja desabilitado antes que a contagem de uso seja reduzida: pm_runtime_disable() seguido por pm_runtime_put_noidle(), em vez de pm_runtime_put_sync(). Reduzir a contagem primeiro com autosuspend ainda habilitado arma o timer de autosuspend, e uma preempção antes de pm_runtime_disable() permite sua expiração, suspendendo o dispositivo e clk_disable() do clock, que então é desabilitado novamente pela liberação devm - gerando o mesmo WARN.
Restaure também a solicitação não gerenciada de IRQ (Interrupt Request). Os caminhos de erro da função probe agora desfazem manualmente o runtime PM usando goto, e um handler registrado via devm só será liberado posteriormente durante o unwind do devres, permanecendo ativo durante toda a desmontagem manual (e em qualquer etapa futura que falhe após ele). Solicite a IRQ com request_threaded_irq() e libere-a explicitamente no caminho de erro da probe e na remove. O caminho de erro da probe também limpa use_autosuspend, para corresponder à desmontagem realizada na remove().
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.