{"id":12340,"date":"2026-09-04T18:54:17","date_gmt":"2026-09-04T10:54:17","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-80683"},"modified":"2026-09-04T18:54:17","modified_gmt":"2026-09-04T10:54:17","slug":"cve-2026-80683","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-80683","title":{"rendered":"CVE-2026-80683 [HIGH] &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nBluetooth: SCO: give"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>Bluetooth: SCO: give the socket its own sco_conn reference<\/p>\n<p>sco_conn_del() drops a reference it does not own. It takes one transient<br \/>\nreference via sco_conn_hold_unless_zero() and releases it with the<br \/>\nsco_conn_put() that follows sco_sock_hold(); the additional put in the<br \/>\n!sk branch releases a second one:<\/p>\n<p>    conn = sco_conn_hold_unless_zero(conn);<br \/>\n    &#8230;<br \/>\n    sk = sco_sock_hold(conn);<br \/>\n    sco_conn_unlock(conn);<br \/>\n    sco_conn_put(conn);<\/p>\n<p>    if (!sk) {<br \/>\n            sco_conn_put(conn);<br \/>\n            return;<br \/>\n    }<\/p>\n<p>When close() races the controller&#8217;s Disconnection Complete, sco_chan_del()<br \/>\nclears conn-&gt;sk and drops the socket&#8217;s reference while sco_conn_del() is<br \/>\nrunning. sco_conn_del() then sees sk == NULL, its own put drops the count<br \/>\nto zero and frees the conn, and the second put writes to the freed kref:<\/p>\n<p>    BUG: KASAN: slab-use-after-free in sco_conn_put.part.0+0x1a\/0x190<br \/>\n    Write of size 4 at addr ffff8881099dec74 by task kworker\/u17:3\/413<br \/>\n    Workqueue: hci1 hci_rx_work<br \/>\n    Call Trace:<br \/>\n     sco_conn_put.part.0+0x1a\/0x190<br \/>\n     hci_disconn_complete_evt+0x1ee\/0x3e0<br \/>\n     hci_event_packet+0x54a\/0x650<br \/>\n     hci_rx_work+0x321\/0x3d0<br \/>\n    Allocated by task 413:<br \/>\n     sco_conn_add+0x72\/0x1a0<br \/>\n     sco_connect_cfm+0x88\/0x670<br \/>\n    Freed by task 413:<br \/>\n     sco_conn_del.isra.0+0x3f\/0xf0<br \/>\n     hci_disconn_complete_evt+0x1ee\/0x3e0<br \/>\n    refcount_t: underflow; use-after-free.<\/p>\n<p>The root cause is that the socket stores the connection without holding a<br \/>\nreference of its own. __sco_chan_add() does:<\/p>\n<p>    sco_pi(sk)-&gt;conn = conn;<\/p>\n<p>so the socket borrows whatever reference its caller happened to hold, and<br \/>\nthe callers paper over that with ad-hoc holds and puts. Give the socket a<br \/>\ncounted reference instead: __sco_chan_add() takes one and it is released<br \/>\ntogether with the channel (sco_chan_del()) and in sco_sock_destruct().<br \/>\nWith the socket holding its own reference, sco_conn_del() no longer needs<br \/>\nthe extra put and the redundant hold in sco_conn_ready() goes away.<\/p>\n<p>Making the socket own its reference means the connection is now actually<br \/>\nfreed on the error paths of sco_connect() where it used to leak, which in<br \/>\nturn runs sco_conn_free() and its hci_conn_drop(conn-&gt;hcon). To keep the<br \/>\nhci_conn accounting balanced, make that ownership explicit as well:<br \/>\nsco_conn_add() consumes one hci_conn reference and the sco_conn owns it for<br \/>\nits lifetime. sco_connect() hands over the reference returned by<br \/>\nhci_connect_sco() and no longer drops it on the error paths;<br \/>\nsco_connect_cfm(), which is not given a reference, takes one with<br \/>\nhci_conn_hold() before handing it to sco_conn_add() (and drops it again if<br \/>\nthe allocation fails); and the explicit hci_conn_hold() in sco_conn_ready()<br \/>\nis removed. Every reference then has a single, clear owner.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>Bluetooth: SCO: give the socket its own sco_conn reference<\/p>\n<p>sco_conn_del() drops a reference it does not own. It takes one transien<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-12340","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/12340","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=12340"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=12340"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=12340"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}