CVE-2026-80683
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: Bluetooth: SCO: sokete kendi sco_conn referansını verme sco_conn_del() fonksiyonu, kendisine ait olmayan bir referansı düşürmektedir. sco_conn_hold_unless_zero() aracılığıyla geçici bir referans alır ve bunu sco_sock_hold() işlemini takip eden sco_conn_put() ile serbest bırakır; !sk dalındaki ek put işlemi ise ikinci bir referansı serbest bırakmaktadır: 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() işlemi kontrolcünün Disconnection Complete olayı ile yarıştığında, sco_conn_del() çalışırken sco_chan_del() fonksiyonu conn->sk değerini temizler ve soketin referansını düşürür. Ardından sco_conn_del() sk == NULL olduğunu görür, kendi put işlemi sayacı sıfıra indirerek conn yapısını serbest bırakır ve ikinci put işlemi serbest bırakılan kref üzerine yazma gerçekleştirir: 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. Kök neden, soketin bağlantıyı kendi referansını tutmadan saklamasıdır. __sco_chan_add() şunları yapar: sco_pi(sk)->conn = conn; Böylece soket, çağıran tarafın sahip olduğu herhangi bir referansı ödünç alır ve çağıranlar bunu geçici hold ve put işlemleriyle kapatmaya çalışır. Bunun yerine sokete sayılı bir referans verilmiştir: __sco_chan_add() bir referans alır ve bu referans kanal ile birlikte (sco_chan_del()) ve sco_sock_destruct() içinde serbest bırakılır. Soket kendi referansını tuttuğunda, sco_conn_del() artık ek put işlemine ihtiyaç duymaz ve sco_conn_ready() içindeki gereksiz hold işlemi kaldırılır. Soketin kendi referansına sahip olması, önceden sızıntı olan sco_connect() hata yollarında bağlantının artık gerçekten serbest bırakılması anlamına gelir; bu da sırasıyla sco_conn_free() ve onun hci_conn_drop(conn->hcon) işlemini çalıştırır. hci_conn muhasebesinin dengeli kalması için bu sahiplik de açık hale getirilmiştir: sco_conn_add() bir hci_conn referansı tüketir ve sco_conn ömrü boyunca buna sahip olur. sco_connect(), hci_connect_sco() tarafından döndürülen referansı devreder ve artık hata yollarında bunu düşürmez; referans verilmeyen sco_connect_cfm(), sco_conn_add()'ye devretmeden önce hci_conn_hold() ile bir referans alır (ve tahsis başarısız olursa bunu tekrar düşürür); ayrıca sco_conn_ready() içindeki açık hci_conn_hold() işlemi kaldırılmıştır. Böylece her referansın tek ve net bir sahibi vardır.
Nasıl düzeltilir
- Linux Linuxa33bc07b4730b6cd5681ac77d18ae0de3e739690, 8fe627192fa5da7157f9a48608f13c04b6373e43, abd93c85c8667add738ee82aeab95dd9fc8265a2 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| Linux Linux | e6720779ae612a14ac4ba7fe4fd5b27d900d932c ≤ v < a33bc07b4730b6cd5681ac77d18ae0de3e739690, e6720779ae612a14ac4ba7fe4fd5b27d900d932c ≤ v < 8fe627192fa5da7157f9a48608f13c04b6373e43, e6720779ae612a14ac4ba7fe4fd5b27d900d932c ≤ v < abd93c85c8667add738ee82aeab95dd9fc8265a2, 6.13 | a33bc07b4730b6cd5681ac77d18ae0de3e739690, 8fe627192fa5da7157f9a48608f13c04b6373e43, abd93c85c8667add738ee82aeab95dd9fc8265a2 |
Sürümünüzü kontrol edin
Ürünü seçin ve kullandığınız sürümü yazın; sürümün etkilenen aralıkta olup olmadığını görün.
Attack Surface Management
Alan adlarınıza bağlı varlıkları, bu varlıklarda çalışan teknolojileri ve bilinen zafiyetleri tek listede görün.