🇰🇷 한글 설명
리눅스 커널의 블루투스 스택에서 hci_unregister_dev() 함수가 hci_dev 객체를 해제한 후에도 hci_suspend_notifier가 해당 객체에 접근하여 시스템 충돌을 일으키는 취약점입니다. 이는 레이스 컨디션(Race Condition)으로 인해 발생하며, 패치는 hci_suspend_notifier 처리 중 객체의 참조 횟수를 유지하도록 수정되었습니다.
💡 쉬운 설명
블루투스 장치를 해제하는 과정과 시스템이 절전 모드로 들어가는 과정이 동시에 일어날 때, 이미 사라진 블루투스 정보를 참조하려다 컴퓨터가 멈추는 문제입니다. 이를 방지하기 위해 작업이 끝날 때까지 해당 정보를 안전하게 붙잡아두도록 수정되었습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
Bluetooth: Fix hci_suspend_sync crash
If hci_unregister_dev() frees the hci_dev object but hci_suspend_notifier
may still be accessing it, it can cause the program to crash.
Here's the call trace:
<4>[102152.653246] Call Trace:
<4>[102152.653254] hci_suspend_sync+0x109/0x301 [bluetooth]
<4>[102152.653259] hci_suspend_dev+0x78/0xcd [bluetooth]
<4>[102152.653263] hci_suspend_notifier+0x42/0x7a [bluetooth]
<4>[102152.653268] notifier_call_chain+0x43/0x6b
<4>[102152.653271] __blocking_notifier_call_chain+0x48/0x69
<4>[102152.653273] __pm_notifier_call_chain+0x22/0x39
<4>[102152.653276] pm_suspend+0x287/0x57c
<4>[102152.653278] state_store+0xae/0xe5
<4>[102152.653281] kernfs_fop_write+0x109/0x173
<4>[102152.653284] __vfs_write+0x16f/0x1a2
<4>[102152.653287] ? selinux_file_permission+0xca/0x16f
<4>[102152.653289] ? security_file_permission+0x36/0x109
<4>[102152.653291] vfs_write+0x114/0x21d
<4>[102152.653293] __x64_sys_write+0x7b/0xdb
<4>[102152.653296] do_syscall_64+0x59/0x194
<4>[102152.653299] entry_SYSCALL_64_after_hwframe+0x5c/0xc1
This patch holds the reference count of the hci_dev object while
processing it in hci_suspend_notifier to avoid potential crash
caused by the race condition.
📍 영향받는 시스템
Linux Kernel (Bluetooth subsystem)
⚔️ 공격 벡터
로컬 사용자가 시스템 절전 모드 전환 및 블루투스 장치 해제를 유도하여 레이스 컨디션 발생
🛡️ 대응 방법
리눅스 커널을 최신 보안 패치가 적용된 버전으로 업데이트
🔧 검증 코드
출력된 커널 버전을 확인하여 해당 취약점이 해결된 패치 버전 이상인지 확인