CVE-2026-98734 in Linux
요약
\~에 의해 VulDB • 2026. 10. 19.
리눅스 커널에서 다음 취약점이 해결되었습니다:
블루투스: hci_core - teardown 시 SCO 및 ISO 스케줄링 직렬화
hci_low_sent()는 RCU 하에 연결을 선택하지만, 할당량을 계산하고 스케줄러로 반환하기 전에 읽기 잠금을 해제합니다. 그런 다음 hci_sched_iso()와 hci_sched_sco()에서 수명 보호 없이 해당 연결이 사용됩니다.
TX 작업자가 RCU 읽기 잠금을 해제한 후, hdev->req_workqueue의 hci_abort_conn_sync()가 해시에서 연결을 제거하고 synchronize_rcu()를 완료하며 큐를 정리하여 연결을 해제할 수 있습니다. 그런 다음 hdev->workqueue의 TX 작업자는 hci_quote_sent() 또는 패킷 디큐 및 conn->sent 업데이트 중에 이미 해제된 연결에 접근합니다.
KASAN이 다음과 같이 보고했습니다:
BUG: KASAN: slab-use-after-free in hci_low_sent+0x730/0x840 Workqueue: hci0 hci_tx_work Call Trace: hci_low_sent+0x730/0x840 hci_sched_iso+0x25e/0x4d0 hci_tx_work+0x239/0xcb0
작업자 93에 의해 할당됨: __hci_conn_add+0x16f/0x1b40 hci_bind_bis+0x782/0x17b0 hci_connect_bis+0xa0/0x510 iso_sock_connect+0x589/0x1050
작업자 88에 의해 해제됨: kfree+0x131/0x3c0 device_release+0xc8/0x240 kobject_put+0x14d/0x280 hci_conn_del+0x55a/0xe80 hci_disconnect_sync+0x156/0x180 hci_abort_conn_sync+0x3e7/0x940 hci_cmd_sync_work+0x13c/0x290
SCO 및 ISO 스케줄링 모두에서 연결 선택과 전송 전반에 걸쳐 hci_dev_lock()을 유지하여, 이를 연결 teardown과 직렬화합니다. 또한 이 조치는 연결 큐가 정리된 후에 완료 타임스탬프를 큐잉하는 것을 방지합니다. TX 경로에서 수면이 발생할 수 있으므로 RCU를 전송 전반으로 확장하는 것은 안전하지 않습니다. hci_link_tx_to() 자체가 해당 잠금을 획득하므로 ISO 시간 초과 확인은 뮤텍스 외부에 유지합니다.
선행 채널 수정은 ACL 및 LE 스케줄러에서 이미 이 뮤텍스를 보유하고 있으며, 이들은 패킷 간 SCO 스케줄러를 호출합니다. SCO 본문을 __hci_sched_sco()로 이동하고, 호출자가 뮤텍스를 보유함을 확인(assert)하며 잠긴 경로에서 이를 직접 사용합니다. hci_tx_work()에서의 직접 호출을 위해 잠금을 수행하는 hci_sched_sco() 래퍼를 유지합니다. 이는 스케줄링 순서를 보존하면서 장치 뮤텍스의 재귀적 획득을 피합니다.
연결 제거가 TX를 비활성화한다는 obsolete한 주장을 제거합니다.
VulDB is the best source for vulnerability data and more expert information about this specific topic.