🇰🇷 한글 설명
Linux 커널 Bluetooth 서브시스템에서 HCI 작업 큐가 드레인되는 동안 명령 타임아웃 작업이 해당 큐에 다시 등록되어 발생하는 경고 및 잠재적 문제가 있었습니다. 수정으로 HCI_DRAIN_WQ 플래그를 추가하여 큐가 드레인 중일 때 타임아웃 작업을 큐에 넣지 않도록 변경되었습니다.
💡 쉬운 설명
블루투스 기기와 통신을 담당하는 리눅스 커널 부분에서 생기던 오류를 고친 내용입니다. 시스템이 멈추거나 경고가 뜨는 문제가 해결됩니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
Bluetooth: When HCI work queue is drained, only queue chained work
The HCI command, event, and data packet processing workqueue is drained
to avoid deadlock in commit
76727c02c1e1 ("Bluetooth: Call drain_workqueue() before resetting state").
There is another delayed work, which will queue command to this drained
workqueue. Which results in the following error report:
Bluetooth: hci2: command 0x040f tx timeout
WARNING: CPU: 1 PID: 18374 at kernel/workqueue.c:1438 __queue_work+0xdad/0x1140
Workqueue: events hci_cmd_timeout
RIP: 0010:__queue_work+0xdad/0x1140
RSP: 0000:ffffc90002cffc60 EFLAGS: 00010093
RAX: 0000000000000000 RBX: ffff8880b9d3ec00 RCX: 0000000000000000
RDX: ffff888024ba0000 RSI: ffffffff814e048d RDI: ffff8880b9d3ec08
RBP: 0000000000000008 R08: 0000000000000000 R09: 00000000b9d39700
R10: ffffffff814f73c6 R11: 0000000000000000 R12: ffff88807cce4c60
R13: 0000000000000000 R14: ffff8880796d8800 R15: ffff8880796d8800
FS: 0000000000000000(0000) GS:ffff8880b9d00000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 000000c0174b4000 CR3: 000000007cae9000 CR4: 00000000003506e0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
Call Trace:
<TASK>
? queue_work_on+0xcb/0x110
? lockdep_hardirqs_off+0x90/0xd0
queue_work_on+0xee/0x110
process_one_work+0x996/0x1610
? pwq_dec_nr_in_flight+0x2a0/0x2a0
? rwlock_bug.part.0+0x90/0x90
? _raw_spin_lock_irq+0x41/0x50
worker_thread+0x665/0x1080
? process_one_work+0x1610/0x1610
kthread+0x2e9/0x3a0
? kthread_complete_and_exit+0x40/0x40
ret_from_fork+0x1f/0x30
</TASK>
To fix this, we can add a new HCI_DRAIN_WQ flag, and don't queue the
timeout workqueue while command workqueue is draining.
📍 영향받는 시스템
패치 이전의 리눅스 커널 (블루투스 HCI 서브시스템 사용 시스템)
⚔️ 공격 벡터
로컬 환경에서 블루투스 명령 타임아웃 상황을 유발하여 커널 경고 또는 서비스 중단을 일으킬 수 있음
🛡️ 대응 방법
배포판 벤더가 제공하는 최신 커널 업데이트를 설치하고 재부팅
🔧 검증 코드
출력된 커널 버전을 배포판의 보안 권고문에 명시된 수정 버전과 비교하여, 같거나 이후 버전이면 패치된 것입니다.