🇰🇷 한글 설명
Linux 커널의 irqchip/gic-v3-its 드라이버에서 물리 주소를 저장할 때 32비트 unsigned long 타입을 사용하여 주소 값이 잘리는 취약점이 발견되었습니다. CONFIG_ARM_LPAE가 설정된 32비트 시스템에서 4GB 이상의 물리 주소를 참조할 경우 메모리 주소 절단 현상이 발생하여 시스템 충돌을 유발할 수 있습니다.
💡 쉬운 설명
컴퓨터가 아주 큰 메모리 주소를 기억해야 하는데, 이를 담는 그릇이 너무 작아서 주소 뒷부분이 잘려 나가는 문제입니다. 이로 인해 시스템이 잘못된 위치를 참조하게 되어 컴퓨터가 갑자기 멈추거나 꺼질 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
irqchip/gic-v3-its: Avoid truncating memory addresses
On 32-bit machines with CONFIG_ARM_LPAE, it is possible for lowmem
allocations to be backed by addresses physical memory above the 32-bit
address limit, as found while experimenting with larger VMSPLIT
configurations.
This caused the qemu virt model to crash in the GICv3 driver, which
allocates the 'itt' object using GFP_KERNEL. Since all memory below
the 4GB physical address limit is in ZONE_DMA in this configuration,
kmalloc() defaults to higher addresses for ZONE_NORMAL, and the
ITS driver stores the physical address in a 32-bit 'unsigned long'
variable.
Change the itt_addr variable to the correct phys_addr_t type instead,
along with all other variables in this driver that hold a physical
address.
The gicv5 driver correctly uses u64 variables, while all other irqchip
drivers don't call virt_to_phys or similar interfaces. It's expected that
other device drivers have similar issues, but fixing this one is
sufficient for booting a virtio based guest.
📍 영향받는 시스템
CONFIG_ARM_LPAE가 활성화된 32비트 ARM 기반 Linux 커널 시스템 (QEMU virt 모델 포함)
⚔️ 공격 벡터
직접적인 공격보다는 특정 메모리 할당 환경에서 시스템을 충돌시키는 Denial of Service(DoS) 유발 가능
🛡️ 대응 방법
물리 주소를 저장하는 변수 타입을 32비트 unsigned long에서 phys_addr_t로 변경한 최신 커널 패치 적용
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 패치 버전 이후인지 확인하십시오.