🇰🇷 한글 설명
리눅스 커널의 Bluetooth btqcomsmd 드라이버에서 hci_dev가 해제되기 전에 RPMsg 엔드포인트가 먼저 파괴되지 않아 발생하는 취약점입니다. 이로 인해 이미 해제된 hci_dev 메모리에 접근하는 Use-After-Free 오류가 발생할 수 있습니다.
💡 쉬운 설명
블루투스 장치를 끌 때 메모리를 정리하는 순서가 잘못되어, 이미 사라진 정보를 다시 불러오려다 시스템이 충돌하거나 오류가 생길 수 있는 문제입니다. 장치가 꺼지는 과정에서 발생하는 일시적인 메모리 관리 실수입니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
Bluetooth: btqcomsmd: destroy RPMsg endpoints before freeing hci_dev
The command and ACL RPMsg endpoints store struct btqcomsmd as their
callback private data. The receive callbacks dereference btq->hdev
without taking an hci_dev reference.
The current teardown order frees the hci_dev before destroying the RPMsg
endpoints in both the hci_register_dev() error path and the driver remove
path. If WCNSS delivers data in that window, the endpoint callback can
run with an already freed hci_dev and pass it to the Bluetooth core.
For qcom_smd endpoints, rpmsg_destroy_ept() closes the channel and clears
the callback under the channel recv_lock. The receive path holds the same
lock while invoking the callback, so destroying the endpoints first both
prevents new callbacks and serializes with any callback already running.
Destroy the command and ACL endpoints before hci_free_dev(). Keep
hci_unregister_dev() first during remove so the HCI core stops issuing
operations before the transport endpoints are shut down. In the full
registration-error cleanup path, return directly after freeing the hci_dev
to avoid falling through to the partial-construction labels and destroying
the endpoints twice.
📍 영향받는 시스템
Linux kernel (Bluetooth btqcomsmd driver components)
⚔️ 공격 벡터
로컬 공격자가 특정 블루투스 장치 해제 시퀀스를 유도하여 메모리 오류 유발
🛡️ 대응 방법
리눅스 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 엔드포인트 파괴 순서 수정
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 패치 버전 이후인지 확인