🇰🇷 한글 설명
Linux 커널의 hns3 네트워크 드라이버에서 TQP BAR 공간 접근 시 경계 검사가 누락되어 발생하는 취약점입니다. TQP 개수가 1024개를 초과할 경우, 서로 다른 세그먼트의 주소를 구분하지 못해 잘못된 메모리 영역에 접근함으로써 커널 패닉(paging request error)을 유발할 수 있습니다.
💡 쉬운 설명
네트워크 장치의 메모리 주소를 계산할 때 범위를 잘못 지정하여 시스템이 멈추거나 오류가 발생하는 문제입니다. 특정 조건에서 장치가 사용하는 메모리 영역을 벗어나 잘못된 곳을 건드리는 현상입니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
net: hns3: fixed hclge_fetch_pf_reg accesses bar space out of bounds issue
The TQP BAR space is divided into two segments. TQPs 0-1023 and TQPs
1024-1279 are in different BAR space addresses. However,
hclge_fetch_pf_reg does not distinguish the tqp space information when
reading the tqp space information. When the number of TQPs is greater
than 1024, access bar space overwriting occurs.
The problem of different segments has been considered during the
initialization of tqp.io_base. Therefore, tqp.io_base is directly used
when the queue is read in hclge_fetch_pf_reg.
The error message:
Unable to handle kernel paging request at virtual address ffff800037200000
pc : hclge_fetch_pf_reg+0x138/0x250 [hclge]
lr : hclge_get_regs+0x84/0x1d0 [hclge]
Call trace:
hclge_fetch_pf_reg+0x138/0x250 [hclge]
hclge_get_regs+0x84/0x1d0 [hclge]
hns3_get_regs+0x2c/0x50 [hns3]
ethtool_get_regs+0xf4/0x270
dev_ethtool+0x674/0x8a0
dev_ioctl+0x270/0x36c
sock_do_ioctl+0x110/0x2a0
sock_ioctl+0x2ac/0x530
__arm64_sys_ioctl+0xa8/0x100
invoke_syscall+0x4c/0x124
el0_svc_common.constprop.0+0x140/0x15c
do_el0_svc+0x30/0xd0
el0_svc+0x1c/0x2c
el0_sync_handler+0xb0/0xb4
el0_sync+0x168/0x180
📍 영향받는 시스템
hns3 드라이버를 사용하는 Linux 커널 시스템 (TQP 개수가 1024개 초과 시)
⚔️ 공격 벡터
로컬 권한을 가진 사용자가 ethtool 등을 통해 네트워크 레지스터 정보를 요청할 때 발생 가능
🛡️ 대응 방법
hns3 드라이버의 TQP 세그먼트 구분 로직이 수정된 최신 Linux 커널로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 패치된 최신 보안 업데이트 버전인지 확인