🇰🇷 한글 설명
Linux 커널의 MANA 드라이버에서 RX 버퍼 할당 크기의 정렬(alignment) 문제로 인해 발생하는 취약점입니다. 특정 MTU 설정(예: 4000)을 사용하는 ARM64 CPU 환경에서 원자적 연산(atomic operation) 수행 시 정렬 오류로 인한 커널 패닉이 발생할 수 있습니다.
💡 쉬운 설명
네트워크 데이터를 받는 과정에서 메모리 공간을 맞추는 규칙이 어긋나 컴퓨터 시스템이 갑자기 멈추거나 오류를 일으키는 문제입니다. 특히 특정 CPU 구조를 사용하는 기기에서 네트워크 설정에 따라 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
net: mana: Fix RX buf alloc_size alignment and atomic op panic
The MANA driver's RX buffer alloc_size is passed into napi_build_skb() to
create SKB. skb_shinfo(skb) is located at the end of skb, and its alignment
is affected by the alloc_size passed into napi_build_skb(). The size needs
to be aligned properly for better performance and atomic operations.
Otherwise, on ARM64 CPU, for certain MTU settings like 4000, atomic
operations may panic on the skb_shinfo(skb)->dataref due to alignment fault.
To fix this bug, add proper alignment to the alloc_size calculation.
Sample panic info:
[ 253.298819] Unable to handle kernel paging request at virtual address ffff000129ba5cce
[ 253.300900] Mem abort info:
[ 253.301760] ESR = 0x0000000096000021
[ 253.302825] EC = 0x25: DABT (current EL), IL = 32 bits
[ 253.304268] SET = 0, FnV = 0
[ 253.305172] EA = 0, S1PTW = 0
[ 253.306103] FSC = 0x21: alignment fault
Call trace:
__skb_clone+0xfc/0x198
skb_clone+0x78/0xe0
raw6_local_deliver+0xfc/0x228
ip6_protocol_deliver_rcu+0x80/0x500
ip6_input_finish+0x48/0x80
ip6_input+0x48/0xc0
ip6_sublist_rcv_finish+0x50/0x78
ip6_sublist_rcv+0x1cc/0x2b8
ipv6_list_rcv+0x100/0x150
__netif_receive_skb_list_core+0x180/0x220
netif_receive_skb_list_internal+0x198/0x2a8
__napi_poll+0x138/0x250
net_rx_action+0x148/0x330
handle_softirqs+0x12c/0x3a0
📍 영향받는 시스템
MANA 드라이버를 사용하는 Linux 커널 (특히 ARM64 아키텍처)
⚔️ 공격 벡터
특정 MTU 설정을 유도하거나 조작하여 네트워크 패킷을 전송함으로써 시스템 패닉 유도
🛡️ 대응 방법
MANA 드라이버의 RX 버퍼 할당 크기 계산 시 적절한 정렬(alignment)이 적용된 최신 커널로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 패치된 버전인지 배포판 보안 공지를 통해 확인