🇰🇷 한글 설명
Linux 커널의 ath12k Wi-Fi 드라이버에서 채널 검증 실패 시 vdev가 생성되지 않음에도 불구하고 링크 맵에 잘못된 링크 정보가 등록되는 취약점입니다. 이로 인해 이후 연결 해제나 키 설정 과정에서 NULL 포인터를 참조하게 되어 커널 패닉(시스템 충돌)이 발생할 수 있습니다.
💡 쉬운 설명
Wi-Fi 연결 과정에서 오류가 발생했을 때, 시스템이 제대로 정리되지 않은 상태로 잘못된 정보를 남겨두어 컴퓨터가 갑자기 멈추거나 꺼질 수 있는 문제입니다. 연결이 끊기거나 보안 키를 설정할 때 시스템이 혼란을 겪으며 발생합니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
wifi: ath12k: fix NULL deref in change_sta_links for unready link
_ieee80211_set_active_links() calls _ieee80211_link_use_channel() for
each newly-added link and WARN_ON_ONCE()s if it fails. The call uses
assign_on_failure=true, which allows mac80211 to continue despite
driver failures, but when a mac80211-level channel validation fails
(e.g., combinations check, DFS, or no available radio),
drv_assign_vif_chanctx() is never reached. Since ath12k_mac_vdev_create()
is only called from that path, arvif->is_created remains false and
arvif->ar remains NULL for the failed link.
The subsequent drv_change_sta_links() call reaches
ath12k_mac_op_change_sta_links(), which allocates an arsta and sets
ahsta->links_map |= BIT(link_id) for the broken link before checking
whether the link is ready. When the vdev was never created, only
station_add() is skipped, but the link remains in links_map.
Any subsequent operation iterating links_map and dereferencing arvif->ar
without a NULL check will crash. Two observed examples are NULL deref in
ath12k_mac_ml_station_remove() on disconnect and in ath12k_mac_op_set_key()
when wpa_supplicant installs PTK keys.
BUG: Unable to handle kernel NULL pointer dereference at 0x00000000
pc : ath12k_mac_station_post_remove+0x40/0xe8 [ath12k]
Call trace:
ath12k_mac_station_post_remove+0x40/0xe8 [ath12k]
ath12k_mac_op_sta_state+0xb60/0x1720 [ath12k]
drv_sta_state+0x100/0xbd8 [mac80211]
__sta_info_destroy_part2+0x148/0x178 [mac80211]
ieee80211_set_disassoc+0x500/0x678 [mac80211]
BUG: Unable to handle kernel NULL pointer dereference at 0x00000000
pc : ath12k_mac_op_set_key+0x1f8/0x2c0 [ath12k]
Call trace:
ath12k_mac_op_set_key+0x1f8/0x2c0 [ath12k]
drv_set_key+0x70/0x100 [mac80211]
ieee80211_key_enable_hw_accel+0x78/0x260 [mac80211]
ieee80211_add_key+0x16c/0x2ac [mac80211]
nl80211_new_key+0x138/0x280 [cfg80211]
Fix this by checking arvif->is_created before calling
ath12k_mac_alloc_assign_link_sta(). This prevents the broken link from
entering links_map, so all subsequent operations iterating the bitmap
are protected. The reliability of arvif->is_created across all error
paths is ensured by the preceding patch.
Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.1.c5-00302-QCAHMTSWPL_V1.0_V2.0_SILICONZ-1.115823.3
📍 영향받는 시스템
Linux kernel with ath12k driver (specifically tested on WCN7850 hw2.0)
⚔️ 공격 벡터
특수하게 조작된 Wi-Fi 연결 요청 또는 채널 검증 실패를 유도하여 커널 NULL 포인터 역참조 유발
🛡️ 대응 방법
ath12k_mac_alloc_assign_link_sta() 호출 전 arvif->is_created 상태를 확인하도록 커널 패치 적용
🔧 검증 코드
현재 실행 중인 커널 버전을 확인하여 해당 취약점이 수정된 최신 패치가 적용되었는지 확인하십시오.