CVE-2026-80683 in Linux
要約
〜によって VulDB • 2026年08月28日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
Bluetooth: SCO: ソケットに独自のsco_conn参照を持たせる
`sco_conn_del()`は、自身が所有していない参照を解放していました。この関数は`sco_conn_hold_unless_zero()`を通じて一時的な参照を取得し、それに続く`sco_sock_hold()`の後に実行される`sco_conn_put()`でそれを解放します。`!sk`ブランチ内の追加のput操作により2つ目の参照が解放されます:
conn = sco_conn_hold_unless_zero(conn); ... sk = sco_sock_hold(conn); sco_conn_unlock(conn); sco_conn_put(conn);
if (!sk) {
sco_conn_put(conn); return; }
`close()`がコントローラの「Disconnection Complete」と競合すると、`sco_chan_del()`は`conn->sk`をクリアし、ソケットの参照を解放しますが、その際`sco_conn_del()`も実行されています。その後、`sco_conn_del()`では`sk == NULL`となり、自身のput操作によりカウントが0になり`conn`が解放されますが、2つ目のput操作は既に解放されたkrefに対して書き込みを行います:
BUG: KASAN: slab-use-after-free in sco_conn_put.part.0+0x1a/0x190 Write of size 4 at addr ffff8881099dec74 by task kworker/u17:3/413 Workqueue: hci1 hci_rx_work Call Trace: sco_conn_put.part.0+0x1a/0x190 hci_disconn_complete_evt+0x1ee/0x3e0 hci_event_packet+0x54a/0x650 hci_rx_work+0x321/0x3d0 Allocated by task 413: sco_conn_add+0x72/0x1a0 sco_connect_cfm+0x88/0x670 Freed by task 413: sco_conn_del.isra.0+0x3f/0xf0 hci_disconn_complete_evt+0x1ee/0x3e0 refcount_t: underflow; use-after-free.
根本原因は、ソケットが参照を保持せずに接続を格納している点にあります。`__sco_chan_add()`では以下のように行われています:
sco_pi(sk)->conn = conn;
これにより、ソケットは呼び出し元が一時的に保有していた任意の参照を借用することになり、呼び出し側はその欠陥をad-hocなholdとputで誤魔化していました。代わりにソケットにカウントされた参照を持たせるようにします:`__sco_chan_add()`が1つ取得し、チャネル(`sco_chan_del()`)および`sco_sock_destruct()`のタイミングで解放されます。ソケットが自身の参照を保持することで、`sco_conn_del()`は追加のput操作を不要とし、`sco_conn_ready()`内の冗長なholdも削除できます。
ソケットがその参照を所有するようにしたことで、接続は以前リークしていた`sco_connect()`のエラーパスでも実際に解放されるようになり、それにより`sco_conn_free()`およびその中の`hci_conn_drop(conn->hcon)`が実行されます。`hci_conn`のアカウント管理をバランスよく保つため、この所有権も明示的にします:`sco_conn_add()`は1つの`hci_conn`参照を消費し、`sco_conn`はその寿命全体でそれを保持します。`sco_connect()`は`hci_connect_sco()`から返された参照を引き渡し、エラーパスではもうドロップしません;参照が渡されない`sco_connect_cfm()`は、`sco_conn_add()`に引き渡す前に`hci_conn_hold()`を使用して1つ取得し(割り当て失敗時にそれを解放します)、また`sco_conn_ready()`内の明示的な`hci_conn_hold()`は削除されます。各参照には単一の明確な所有者が存在することになります。
If you want to get best quality of vulnerability data, you may have to visit VulDB.