🇰🇷 한글 설명
Linux 커널의 mt7925 Wi-Fi 드라이버에서 전송 헤드룸(headroom)을 적절히 확인하지 않아 발생하는 취약점입니다. 유선 인터페이스와 mt7925 AP를 브릿지로 연결할 경우, 포워딩된 프레임 처리 과정에서 메모리 경계를 초과하여 커널 패닉(Kernel Panic)을 유발할 수 있습니다.
💡 쉬운 설명
Wi-Fi 장치가 데이터를 보낼 때 필요한 여유 공간을 미리 확인하지 않아 시스템이 갑자기 멈추거나 꺼질 수 있는 문제입니다. 특히 유선 인터넷을 Wi-Fi로 공유하는 설정에서 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
wifi: mt76: mt7925: ensure tx headroom in usb_sdio_tx_prepare_skb
mt7925_usb_sdio_tx_prepare_skb() pushes a TX descriptor and a USB
header onto every skb and assumes the headroom for them is already
there. That holds for locally generated traffic, where mac80211
reserves hw->extra_tx_headroom, but forwarded frames are sent through
ieee80211_8023_xmit(), which does not reserve it. Bridge a wired
interface to an mt7925u AP and the first forwarded frame that arrives
short panics the kernel:
skbuff: skb_under_panic: len:415 put:4 tail:0x19b end:0x640 dev:wlan1
kernel BUG at net/core/skbuff.c:212!
Call trace:
skb_panic+0x58/0x60 (P)
skb_push+0x58/0x60
mt7925_usb_sdio_tx_prepare_skb+0xf8/0x1b8 [mt7925_common]
mt76u_tx_queue_skb+0xa0/0x1f8 [mt76_usb]
__mt76_tx_queue_skb+0x54/0xe8 [mt76]
mt76_txq_schedule.part.0+0x204/0x478 [mt76]
mt76_txq_schedule_all+0x50/0x80 [mt76]
mt792x_tx_worker+0x68/0x100 [mt792x_lib]
__mt76_worker_fn+0x84/0x150 [mt76]
Whether a given setup hits it depends on how much headroom the ingress
netdev leaves in its rx skbs. Reproduced on a Raspberry Pi 5 bridging
onboard ethernet to a Netgear A9000; originally reported on an MT7986
router running OpenWrt. Nick Morrow's testing on a Pi 4 (bcmgenet),
which leaves more headroom, helped narrow the trigger to the ingress
path.
The same bug was fixed on mt7921 by commit 98c4d0abf5c4 ("mt76:
mt7921: don't assume adequate headroom for SDIO headers"), but mt7925
was copied from mt7921 without the fix. Add the same guard here.
📍 영향받는 시스템
Linux kernel (mt76/mt7925 driver 사용 시스템)
⚔️ 공격 벡터
네트워크 브릿지 환경에서 특정 구조의 포워딩된 프레임을 전송하여 커널 패닉 유도
🛡️ 대응 방법
mt7925 드라이버의 tx headroom 검사 로직이 포함된 최신 Linux 커널로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 패치가 적용된 버전인지 확인