CVE-2026-80659 in Linux
要約
〜によって VulDB • 2026年08月28日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
mmc: vub300: cmd_mutexが解放されるまでリセットを延期する
vub300_cmndwork_thread()は、コマンドを送信し応答を待っている間、cmd_mutexを保持します。もし応答待ちがタイムアウトした場合、__vub300_command_response()はコマンドのURB(USB Request Block)を終了させ、その後usb_reset_device()を通じてUSBデバイスを同期的にリセットします。
このリセットパスでは、vub300_pre_reset()を介してドライバ内に再進入し、ここでもcmd_mutexが取得されます。その結果、ワーカーはコマンドパスから保持している同じmutexに対して、再帰的にロックの獲得を試みます。
本問題は静的解析ツールによって発見され、その後現在のツリーに対して手動レビューが行われました。
実装されたPoC(Proof of Concept)では、実際のワーカーとタイムアウト/リセットのトリガーが維持されました:
vub300_cmndwork_thread() __vub300_command_response() usb_lock_device_for_reset() usb_reset_device() vub300_pre_reset()
Lockdepは、cmd_mutexに対する同一タスクによる再帰的ロック取得を検出しました:
WARNING: possible recursive locking detected ... (&test_vub300.cmd_mutex) ... at: usb_reset_device... [vuln_msv]
... (&test_vub300.cmd_mutex) ... at: vub300_cmndwork_thread+0x12/0x20 [vuln_msv]
Workqueue: vub300_cmd_wq vub300_cmndwork_thread [vuln_msv]
*** DEADLOCK ***
タイムアウトパスでデバイスのリセットが必要な場合に、__vub300_command_response()からフラグを返すようにし、その後vub300_cmndwork_thread()が実行中のコマンド状態をクリアしてcmd_mutexを解放した後にリセットを実行します。これにより、既存のリクエスト完了順序は維持されたまま、再帰的ロックの回避が可能になります。
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.