Zafiyet.live Keşfet. Değerlendir. Düzelt. Doğrula.
  • Son 7 gün

CVE-2026-99011

Linux çekirdeğinde Bluetooth SCO sürücüsünde bellek serbest bırakıldıktan sonra kullanım (use-after-free) açığı

Linux

Yüksek 7,1 CVSS 3.1
Yayımlandı
Güncellendi
24 Eki 2026
Açık yaşı
5 gün
Kaydı açan
Linux

ÖzetTürkçe

Linux çekirdeğindeki Bluetooth SCO bileşeninde, sco_recv_scodata fonksiyonu hcon->sco_data zayıf referans işaretçisini hdev->lock altında güçlü bir referansa dönüştürür; ancak bu işaretçi kilit alınmadan diğer taraftan temizlenmektedir. Son sco_conn referansı bırakıldığında sco_conn_free fonksiyonu, hdev->lock tutulmadan conn->hcon->sco_data değerini NULL yapmakta, bu da RX yolunun eşzamanli olarak serbest bırakılmış bir sco_conn nesnesi üzerinde kref_get_unless_zero çağırmasına ve bellek serbest bırakıldıktan sonra kullanım (KASAN: slab-use-after-free) hatasına yol açabilmektedir. Düzeltmede hcon->sco_data, işaret ettiği sco_conn üzerinde gerçek bir referans tutar ve işaretçi yalnızca hdev->lock altında çalışan sco_conn_del içinde temizlenip serbest bırakılır; böylece okuma ve yazma eşzamanlı olarak seri hale getirilir. Ayrıca hci_conn sahipliği soketе devredilmiştir: __sco_chan_add bir hci_conn referansı alır ve bu referans sco_chan_del ile sco_sock_destruct içinde tam olarak bir kez serbest bırakılır. Etki, CVSS 3.1 vektörü CVSS:3.1/AV:A/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:H ile 7.1 (YÜKSEK) olarak derecelendirilmiştir. Etkilenen sürüm: Linux 6.13 (6.13 dahil); 6.18.57, 7.2.11 ve sonrasında düzeltilmiştir.

Kaynaktaki açıklama (İngilizce)

In the Linux kernel, the following vulnerability has been resolved:

Bluetooth: SCO: serialise sco_conn lifetime against sco_recv_scodata()

sco_recv_scodata() upgrades the weak hcon->sco_data back-pointer to a
strong reference under hdev->lock:

hci_dev_lock(hdev);
hcon = hci_conn_hash_lookup_handle(hdev, handle);
...
conn = sco_conn_hold_unless_zero(hcon->sco_data);
hci_dev_unlock(hdev);

but the pointer is cleared from the other side without that lock. When
the last sco_conn reference is dropped, sco_conn_free() ran

conn->hcon->sco_data = NULL;

with no hdev->lock held, so the RX path could read hcon->sco_data and
call kref_get_unless_zero() on an sco_conn that was concurrently freed:

BUG: KASAN: slab-use-after-free in sco_conn_hold_unless_zero+0xbe/0x160
Write of size 4 by task kworker/u17:0
Workqueue: hci0 hci_rx_work
Call Trace:
sco_conn_hold_unless_zero+0xbe/0x160
sco_recv_scodata+0x13f/0x490
hci_rx_work+0x3af/0x730

kref_get_unless_zero() only guards against a zero refcount, not against
the backing memory already being freed.

Give hcon->sco_data an actual reference on the sco_conn it points to, so
the object cannot be freed while the pointer is still installed, and only
clear and drop it from sco_conn_del(), which runs under hdev->lock (its
callers, sco_connect_cfm() and sco_disconn_cfm(), hold it). The reader in
sco_recv_scodata() also takes hdev->lock, so the store and the read are
now serialised: the RX path either observes NULL or a reference that is
guaranteed to stay valid until it drops its own.

sco_conn_add() no longer hands its kref_init() reference to the caller as
the connection's only reference; that initial reference is the one owned
by hcon->sco_data, and callers get their own via sco_conn_hold().

Because the sco_conn can now outlive the socket (the association keeps it
alive until the link goes down), the hci_conn can no longer be dropped
from sco_conn_free() without regressing socket close: closing a connected
SCO socket must still tear the link down. Move hci_conn ownership to the
socket instead: __sco_chan_add() takes an hci_conn reference and it is
released from sco_chan_del() and sco_sock_destruct(), exactly once. The
sco_conn no longer owns an hci_conn reference, so sco_conn_add() stops
consuming one and sco_connect() drops the hci_connect_sco() reference on
every path; sco_connect_cfm() no longer needs its hci_conn_hold() dance.

Bu açığın açıklamasını Türkçeye çevirdik. Adım adım çözüm önerilerini kritik ve yeni açıklar için hazırlıyoruz; düzeltilmiş sürüm aşağıdaki tabloda, ayrıntılar üreticinin duyurusunda.

Etkilenen sürümler1 yazılım

YazılımEtkilenenDüzeltildiği sürüm
Linux 6.13 –
< 6.13 Etkilenmiyor –
≥ 6.18.57 Etkilenmiyor –
≥ 7.2.11 Etkilenmiyor –

Kaynaklar5 kaynak

Kayıt geçmişi

  1. Yayımlandı

İlgili açıklar

Türkçe metin, resmi kayıtlardaki bilgilerle yapay zekâ yardımıyla yazıldı ve yayından önce otomatik kontrollerden geçti. Bir değişikliği uygulamadan önce üreticinin duyurusuna mutlaka bakın.