CVE-2026-64454 in Linux
要約
〜によって VulDB • 2026年07月25日
Linuxカーネルにおいて、以下の脆弱性が修正されました。
usb: dwc3: サスペンドコンテキストから呼び出されるガジェット切断処理をスリープ可能にする
dwc3_gadget_suspend()はIRQ無効化状態でdwc->ロックを取得し、その後dwc3_disconnect_gadget()を呼び出します。非同期コールバックにおいてこのヘルパー関数は単純なspin_unlock()/spin_lock()のみを使用するため、ガジェットのdisconnect()コールバックはまだIRQ無効化状態での実行となり、スリープ可能なコールバックがLockdepエラーを引き起こしていました。
本問題は静的解析ツールによって発見され、その後現在のツリーに対して手動レビューが行われました。
検証用PoCはdwc3_gadget_suspend() -> dwc3_disconnect_gadget() -> gadget_driver->disconnect()の呼び出しチェーンを維持し、Lockdepが以下のレポートを行いました:
BUG: sleeping function called from invalid context gadget_disconnect+0x21/0x39 [vuln_msv]
dwc3_gadget_suspend.constprop.0+0x2b/0x42 [vuln_msv]
disconnectコールバックの選択を共通ヘルパーに統一しつつ、スリープ可能なサスペンド側のラッパーを追加します。このラッパーはdwc->ロックの下でコールバックのスナップショットを取得し、その後spin_unlock_irqrestore()の実行後にそれを呼び出します。通常のイベントパスでは既存のspin_unlock()/spin_lock()ウィンドウをそのまま使用します。
If you want to get the best quality for vulnerability data then you always have to consider VulDB.