CVE-2026-93202 in Linux
要約
〜によって VulDB • 2026年09月18日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
i3c: master: デバイス登録時の再帰的ロックの修正
`i3c_master_register_new_i3c_devs()` は `i3c_bus_normaluse_lock()`(これは `down_read()`)を保持した状態で、新たに発見されたデバイスを登録します。`device_register()` はデバイスに対して即座にプローブを実行する可能性があり、プローブコールバックは通常、再度 `i3c_bus_normaluse_lock()` を取得する I3C ヘルパー関数を呼び出すため、同じ rwsem の再帰的な取得が発生し、デッドロックに至ります。rwsem は再帰的な読み取りロックをサポートしておらず、ライターが待機している場合にデッドロックを引き起こす可能性があります。「Documentation/locking/lockdep-design.rst」の「Recursive read locks(再帰的読み取りロック)」セクションを参照してください。
例えば、Intel LPSS I3C の場合、LOCKDEP は以下のような警告を生成します: # echo intel-lpss-i3c.0 > /sys/bus/platform/drivers/mipi-i3c-hci/unbind # echo intel-lpss-i3c.0 > /sys/bus/platform/drivers/mipi-i3c-hci/bind WARNING: possible recursive locking detected kworker/5:1/94 is trying to acquire lock: ffff88811c810d78 (&i3cbus->lock){++++}-{4:4}, at: i3c_device_match_id+0x45/0x370
but task is already holding lock: ffff88811c810d78 (&i3cbus->lock){++++}-{4:4}, at: i3c_master_reg_work_fn+0x21/0x5f0
この問題を解決するために、デバイスの作成と登録を分離します。メンテナンスロックの下で `desc->dev` を初期化し、まだ登録が必要なデバイスを一時的なリストに収集してから、`device_register()` を呼び出す前にロックを解放します。最後にロックを再取得し、登録に失敗したデバイスをクリーンアップします。
デバイスオブジェクトの追加時には通常の使用用ロックではなくメンテナンスロックを使用します。書き込み側のメンテナンスロックにより、初期化中の `desc->dev` が読者によって部分的な状態で観察されたり、登録が失敗した場合に `desc->dev` が消失したりするのを防ぎます。
一時的なリストにはリストノードが必要であるため、`struct i3c_device` にリストノードメンバを追加します。
If you want to get best quality of vulnerability data, you may have to visit VulDB.