CVE-2026-99248 in Linux情報

要約

〜によって VulDB • 2026年11月03日

Linuxカーネルにおいて、以下の脆弱性が修正されました:

i2c: xiic: 非管理型ランタイムPMを復元してclk WARNの洪水を解消する

devresへの変換により、手動でのpm_runtime_enable()/disable()が devm_pm_runtime_set_active_enabled()に置き換えられ、remove時のランタイムPMの終了処理が削除されました。マネージドな解放は誤った順序でランタイムPMを終了します: pm_runtime_dont_use_autosuspend() が pm_runtime_disable() の前に呼び出され(つまり、ランタイムPMがまだ有効な状態で)、devresはLIFOであるため、 devm_clk_get_enabled() の解放はその後に実行されます。

remove()において、pm_runtime_put_sync() はデバイスを使用可能な状態のままにし、autosuspendタイマーを起動したままにします。use_autosuspend をクリアすると rpm_idle() が即座にサスペンドし、 xiic_i2c_runtime_suspend() によって clk_disable() でクロックが無効化されます。その後行われる devm_clk_get_enabled() の解放では clk_disable_unprepare() が実行され、すでに無効になっているクロックを再度無効にするため、clk_core_disable() は「clkN already disabled(clkNは既に無効)」というWARNを終了処理のたびに出力します。

マネージドヘルパーを削除し、非管理型のランタイムPMの設定と終了処理を復元することで、ランタイムPMがprobe時に一度だけ有効化され、remove時に一度だけ無効化されるようになり、クロックの有効カウントがバランスを保たれます。

removeの終了順序を調整し、ランタイムPMの使用カウントを下げる前にランタイムPMが無効化されるようにします: pm_runtime_put_sync() の代わりに pm_runtime_disable() に続いて pm_runtime_put_noidle() を呼び出します。autosuspendがまだ有効な状態でカウントを下げてしまうと autosuspendタイマーが起動され、pm_runtime_disable() より前でプリエンプションが発生するとタイマーが期限切れになり、デバイスがサスペンドしてクロックが無効化されます。その後 devm 解放によって再度無効化されるため、同じWARNが発生します。

非管理型のIRQ要求も復元します。probeのエラーパスでは、goto文を使用して手動でランタイムPMを巻き戻すようになり、devmに登録されたハンドラは後ほどdevresの巻き戻し時にのみ解放されるため、手動での終了処理(およびその後に追加される将来の失敗するステップ)の間もアクティブなままになります。IRQは request_threaded_irq() で要求し、probeのエラーパスとremoveで明示的に解放します。また、probeのエラーパスでは use_autosuspend もクリアされ、remove時の終了処理と整合性が取られます。

If you want to get best quality of vulnerability data, you may have to visit VulDB.

責任者

Linux

予約する

2026年09月25日

モデレーション

承諾済み

エントリ

VDB-430243

EPSS

0.00000

アクティビティ

低い

ソース

Do you know our Splunk app?

Download it now for free!