🇰🇷 한글 설명
Linux 커널의 mac80211 WiFi 드라이버에서 ieee80211_do_stop() 함수가 인터럽트 비활성화 상태에서 네트워크 패킷을 전송하려고 시도할 때 발생하는 문제입니다. 두 단계 SKB 회수 메커니즘을 도입하여 실제 작업을 인터럽트 비활성화 구간 외부에서 수행하도록 수정되었습니다.
💡 쉬운 설명
WiFi 드라이버가 종료될 때 안전하지 않은 순서로 메모리를 정리하여 시스템 경고를 발생시키는 문제입니다. 이를 안전한 두 단계 과정으로 변경하여 수정했습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
wifi: mac80211: use two-phase skb reclamation in ieee80211_do_stop()
Since '__dev_queue_xmit()' should be called with interrupts enabled,
the following backtrace:
ieee80211_do_stop()
...
spin_lock_irqsave(&local->queue_stop_reason_lock, flags)
...
ieee80211_free_txskb()
ieee80211_report_used_skb()
ieee80211_report_ack_skb()
cfg80211_mgmt_tx_status_ext()
nl80211_frame_tx_status()
genlmsg_multicast_netns()
genlmsg_multicast_netns_filtered()
nlmsg_multicast_filtered()
netlink_broadcast_filtered()
do_one_broadcast()
netlink_broadcast_deliver()
__netlink_sendskb()
netlink_deliver_tap()
__netlink_deliver_tap_skb()
dev_queue_xmit()
__dev_queue_xmit() ; with IRQS disabled
...
spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags)
issues the warning (as reported by syzbot reproducer):
WARNING: CPU: 2 PID: 5128 at kernel/softirq.c:362 __local_bh_enable_ip+0xc3/0x120
Fix this by implementing a two-phase skb reclamation in
'ieee80211_do_stop()', where actual work is performed
outside of a section with interrupts disabled.
📍 영향받는 시스템
Linux 커널 모든 버전 (특히 mac80211 드라이버를 사용하는 WiFi 장치)
⚔️ 공격 벡터
로컬 서비스 거부 (WiFi 인터페이스 종료 시 커널 경고/불안정성 유발)
🛡️ 대응 방법
영향받는 버전의 Linux 커널 업데이트 (CVE-2024-47713 패치 포함)
🔧 검증 코드
커널 버전을 확인한 후 최근 dmesg 로그에서 mac80211이나 softirq 관련 경고가 있는지 확인합니다. 경고가 없으면 패치가 적용된 상태입니다.
uname -r | grep -E '^[0-9]+\.[0-9]+\.[0-9]+' && dmesg | tail -20 | grep -i 'mac80211\|softirq'