Linux 커널에서는 다음 취약점이 해결되었습니다. 블루투스: btintel: hci_req_sync_lock을 사용하여 btintel_hw_error() 직렬화 btintel_hw_error()는 두 개의 __hci_cmd_sync() 호출을 실행합니다(HCI_OP_RESET 및 인텔 예외 정보 검색) 보유 없이 hci_req_sync_lock(). 이를 통해 경쟁할 수 있습니다. hci_dev_do_close() -> btintel_shutdown_combined()도 실행됩니다. 동일한 잠금 아래에 있는 __hci_cmd_sync(). 두 경로가 모두 조작되는 경우 hdev->req_status/req_rsp를 동시에 실행하면 닫기 경로가
Linux 커널에서는 다음 취약점이 해결되었습니다.
블루투스: btintel: hci_req_sync_lock을 사용하여 btintel_hw_error() 직렬화
btintel_hw_error()는 두 개의 __hci_cmd_sync() 호출을 실행합니다(HCI_OP_RESET 및 인텔 예외 정보 검색) 보유 없이 hci_req_sync_lock(). 이를 통해 경쟁할 수 있습니다. hci_dev_do_close() -> btintel_shutdown_combined()도 실행됩니다. 동일한 잠금 아래에 있는 __hci_cmd_sync(). 두 경로가 모두 조작되는 경우 hdev->req_status/req_rsp를 동시에 실행하면 닫기 경로로 인해 먼저 skb에 응답하고 여전히 실행 중인 hw_error 경로가 kfree_skb()의 slab-use-after-free.
전체 복구 시퀀스를 hci_req_sync_lock/unlock에 래핑하여 다른 모든 동기식 HCI 명령 발행자와 함께 직렬화됩니다.
다음은 데이터 경쟁 보고서와 kasan 보고서입니다.
버그: __hci_cmd_sync_sk / btintel_shutdown_combined의 데이터 경쟁
net/bluetooth/hci_sync.c:199에서 hdev->req_rsp 읽기 작업별 kworker/u17:1/83: __hci_cmd_sync_sk+0x12f2/0x1c30 net/bluetooth/hci_sync.c:200 __hci_cmd_sync+0x55/0x80 net/bluetooth/hci_sync.c:223 btintel_hw_error+0x114/0x670 drivers/bluetooth/btintel.c:254 hci_error_reset+0x348/0xa30 net/bluetooth/hci_core.c:1030
ioctl/22580 작업으로 쓰기/해제: btintel_shutdown_combined+0xd0/0x360 드라이버/블루투스/btintel.c:3648 hci_dev_close_sync+0x9ae/0x2c10 net/bluetooth/hci_sync.c:5246 hci_dev_do_close+0x232/0x460 net/bluetooth/hci_core.c:526
BUG: KASAN: slab-use-after-free in sk_skb_reason_drop+0x43/0x380 net/core/skbuff.c:1202 주소 ffff888144a738dc에서 크기 4 읽기 작업별 kworker/u17:1/83: __hci_cmd_sync_sk+0x12f2/0x1c30 net/bluetooth/hci_sync.c:200 __hci_cmd_sync+0x55/0x80 net/bluetooth/hci_sync.c:223 btintel_hw_error+0x186/0x670 drivers/bluetooth/btintel.c:260
왜 이 VPI인가 (설명가능 · 실험적)
VPI 산정 기준
| 영향도 | 78.00 |
| 악용 신호(추가 악용신호 없음) | ×1.00 |
| VPI | 78.00 |
VPI 공식 vpi-v1 기준