🇰🇷 한글 설명
Linux 커널의 mt76 드라이버에서 PCIe AER(Advanced Error Reporting) 오류 발생 시 버스가 중단되면 레지스터 읽기 값이 0xFFFFFFFF로 반환되는 취약점이 있습니다. 이로 인해 DMA 큐 상태가 손상되어 잘못된 메모리 접근이 발생하고 시스템 크래시(Kernel Panic)가 유발될 수 있습니다.
💡 쉬운 설명
Wi-Fi 장치에 하드웨어 오류가 발생했을 때, 시스템이 잘못된 데이터를 읽어 들여 컴퓨터 전체가 멈추거나 꺼질 수 있는 문제입니다. 하드웨어 오류 상황을 제대로 처리하지 못해 발생하는 메모리 오류입니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
wifi: mt76: mt7921: Add PCIe AER handler support to prevent system crash
When an AER error occurs and the bus is hung, the register reads return
0xFFFFFFFF, causing the DMA queue state to be corrupted and resulting in
an invalid memory access when accessing q->desc[] or q->entry[].
Unable to handle kernel paging request at virtual address
ffffffc01099eac0
pc : mt76_dma_add_buf+0x124/0x188 [mt76]
lr : mt76_dma_rx_fill+0x11c/0x1d8 [mt76]
sp : ffffffc016d9bbf0
x29: ffffffc016d9bc10 x28: 0000000000000000
x27: 0000000000000000 x26: ffffffb7855e50b8
x25: ffffffb80d04f000 x24: 0000000000000000
x23: 0000000000000ec0 x22: ffffffb796803648
x21: ffffffb796801f80 x20: ffffffb7968035f8
x19: 0000000000000ec0 x18: 0000000000000000
x17: 000000004ec00000 x16: 000000000ec00000
x15: ffffffc01099eac0 x14: 000000004ec00000
x13: 00000000ffc5a000 x12: ffffffc016d9bc32
x11: 00000000ffffffff x10: 0000000000000002
x9 : 0000000000000000 x8 : 000000000000b4ac
x7 : 0000000000000a20 x6 : ffffffb6c1806400
x5 : 0000000000000000 x4 : ffffffb80d04f000
x3 : 0000000000000000 x2 : 0000000000000001
x1 : 000000000ec04000 x0 : ffffffb7968035f8
Call trace:
mt76_dma_add_buf+0x124/0x188 [mt76 (HASH:1029 4)]
mt76_dma_rx_reset+0xe8/0xfc [mt76 (HASH:1029 4)]
mt7921_wpdma_reset+0x188/0x1b0 [mt7921e (HASH:ee48 5)]
mt7921e_mac_reset+0x128/0x418 [mt7921e (HASH:ee48 5)]
mt7921_mac_reset_work+0xac/0x1a8 [mt7921_common (HASH:f721 6)]
process_one_work+0x188/0x514
worker_thread+0x12c/0x300
kthread+0x140/0x1fc
ret_from_fork+0x10/0x30
Fix the invalid memory access by validating the DMA index read from the
hardware before it is used as a queue index. An out-of-range value, such
as the 0xFFFFFFFF returned while the bus is hung, is now clamped so it can
no longer corrupt q->head or q->tail. In addition, check the bus_hung flag
in mt7921_mac_reset_work() before attempting the reset sequence, reject MCU
messages while the bus is hung, and install no-op bus operations when an
unrecoverable AER error is detected, preventing further invalid hardware
accesses.
Due to hardware limitations - such as the lack of a connected hardware
reset pin or the absence of host re-probe functionality - affected Wi-Fi
devices may not fully recover to a normal operational state after
certain errors, even with AER enabled.
📍 영향받는 시스템
Linux kernel (mt76/mt7921 driver modules)
⚔️ 공격 벡터
PCIe 버스 오류(AER)를 유발하는 하드웨어 결함 또는 물리적 간섭을 통한 시스템 크래시 유도
🛡️ 대응 방법
Linux 커널을 최신 버전으로 업데이트하여 PCIe AER 핸들러 지원 및 DMA 인덱스 유효성 검사 패치를 적용하십시오.
🔧 검증 코드
현재 커널 버전과 mt76 모듈 정보를 확인하여 해당 취약점이 해결된 최신 패치가 적용되었는지 확인합니다.
uname -r && modinfo mt76 | grep version