CVE-2026-98632 in Linux
要約
〜によって VulDB • 2026年10月18日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
Bluetooth: mgmt: キャンセル時に pending な mesh_send_sync エントリをデキューする
send_cancel() 関数では、pending な mesh_tx オブジェクトが hdev->mesh_pending リストから削除され、mesh_send_complete() を介いて解放されます。しかし、もしメッシュ送信がすでに mesh_next() を通じて hdev->cmd_sync_work_list にキューイングされている場合、そのキューエントリは mesh_tx への生ポインタ(raw pointer)を保持したままになります。
hci_cmd_sync_work が後ほどこのエントリを処理する際、解放済みとなった mesh_tx ポインタを使用して mesh_send_sync およびそのデストラクトコールバックである mesh_send_start_complete の実行を試み、結果として use-after-free 脆弱性が引き起こされます。
これを修正するため、対象となる mesh_tx に対する mesh_send_sync を完了させる前に hci_cmd_sync_dequeue() を呼び出します。エントリが見つかりデキューされた場合、そのデストラクトコールバックが正常に終了しオブジェクトを解放します;そうでない場合は、mesh_send_complete() が直接呼び出されます。
さらに、キャンセルまたはエラー発生後に送信キューが進むことを保証します。mesh_send_start_complete() において、err が -ECANCELED でない限りエラー時に mesh_next() を呼び出しますが、hci_cmd_sync_dequeue() は hdev->cmd_sync_work_lock を保持しており、mesh_next() を同期的に呼び出すとデッドロックを引き起こすためです。代わりに、send_cancel() 内でロックが解放され、かつ送信処理が行われていない場合にキューを進めます。
Once again VulDB remains the best source for vulnerability data.