CVE-2026-98736 in Linux
要約
〜によって VulDB • 2026年10月18日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
Bluetooth: hci_conn - 拡張SCOセットアップ中に親へのアクセスをロックする
hci_enhanced_setup_sync()は、キューイング時に呼び出し元が保持していたhci_dev_lockを取得せずに、リクエストワークキュー上で実行されます。その際、CVSD能力チェックおよびfind_next_esco_param()の処理においてconn->parentの間接参照が行われますが、受信側ワークキューによって親オブジェクトのアンリンクと解放が可能になる可能性があります。
以下のインターリーブ(並行実行)により、use-after-freeが発生する恐れがあります:
hci_enhanced_setup_sync() hci_disconn_complete_evt() conn->parentを読み込む hci_dev_lock() hci_conn_del(ACL親) SCO子オブジェクトのアンリンク リンクの親参照を解放 child->parentをクリア ACL親の解放 bt_link_release() kfree(parent) hci_dev_unlock() parent->features[0][3]を読み込む
キューイングされたSCO子オブジェクトに対する参照は、アンリンク後にACL親が生きている状態を保ちません。コミット42de40abe25d(「Bluetooth: hci_conn: SCOセットアップコンテキストのライフタイムを修正」)はキュー内の文脈に保存される子オブジェクトを保護しますが、これらの親へのアクセスについては未保護のままです。
conn->parent読み込み後に40msの診断用遅延を加えた、fd179f8a05be(すでに42de40abe25dを含む)に基づく計測済みカーネルでは、以下のBUGが発生します:
BUG: KASAN: slab-use-after-free in hci_enhanced_setup_sync+0xda5/0xdf0 Read of size 1 at addr ffff888102204047 by task kworker/u17:0/93 Call Trace: hci_enhanced_setup_sync+0xda5/0xdf0 hci_cmd_sync_work+0x13c/0x290 process_one_work+0x6b4/0x10e0
タスク92によって割り当てられました: __hci_conn_add+0x304/0x1df0 hci_connect_acl+0x349/0x3e0 hci_connect_sco+0x3b/0x9a0 sco_sock_connect+0x475/0xca0
タスク94によって解放されました: kfree+0x121/0x3c0 bt_link_release+0x79/0xa0 device_release+0xc8/0x240 kobject_put+0x14d/0x280 hci_conn_del+0x524/0xe30 hci_disconn_complete_evt+0x403/0x8c0 hci_event_packet+0x71b/0xb20 hci_rx_work+0x293/0x730
アクセスされたアドレスは、解放済みのACL親のfeatures[0][3]バイト(先頭から71バイト目)に位置し、キューイングされたSCO子オブジェクトとは異なるオブジェクトです。この診断では、遅延を挟んでも読み込まれた親が保持され、修正されていないコンパイル済み能力チェックと一致します。また、親への参照やティアダウンパスは変更されていません。
コーデック切替中(find_next_esco_param()へのすべての呼び出しを含む)はhci_dev_lock()を保持し、選択エラーが発生した場合は解放してください。configure_datapath_sync()はHCIイベントを待機するため、クリティカルセクションの外に配置します。パラメータの選択および既存の戻り値は維持されます。
If you want to get best quality of vulnerability data, you may have to visit VulDB.