🇰🇷 한글 설명
Linux 커널의 qla2xxx 드라이버에서 QLAFX00 요청 링 슬롯을 초기화할 때 일반 memset()을 사용하여 발생하는 취약점입니다. ARM64와 같은 아키텍처에서 Device 메모리에 부적절한 명령어를 실행하여 동기식 외부 어보트(synchronous external abort)를 유발할 수 있습니다.
💡 쉬운 설명
특정 하드웨어 장치를 제어하는 소프트웨어가 메모리를 정리하는 과정에서 잘못된 방식을 사용하여 시스템이 갑자기 멈추거나 오류가 발생할 수 있습니다. 특히 ARM 기반 프로세서를 사용하는 환경에서 시스템 충돌을 일으킬 수 있는 문제입니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
scsi: qla2xxx: Use memset_io() to clear QLAFX00 request ring slot
For QLAFX00 the request ring is ioremapped device I/O memory
(ha->iobase + req_que_off), not DMA-coherent RAM, which is why the rest
of the FX00 path accesses it through memcpy_toio() and the wrt_reg_*
helpers. __qla2x00_alloc_iocbs() however zeroed the producer slot with a
plain memset(). On architectures such as ARM64 a regular memset() may
emit unaligned or block-zeroing instructions (e.g. DC ZVA) that are
invalid on Device memory, leading to a synchronous external abort.
Use memset_io() to clear the slot for QLAFX00, matching the I/O
accessors used elsewhere on this ring. Other adapters keep the plain
memset() on their DMA-coherent rings. The zero-fill is retained for FX00
because its IOCB builders (e.g. qlafx00_fxdisc_iocb()) copy only part of
the entry and rely on the unused tail being pre-zeroed.
📍 영향받는 시스템
Linux kernel (qla2xxx driver, QLAFX00 adapter 사용 환경)
⚔️ 공격 벡터
직접적인 외부 공격보다는 특정 하드웨어 동작 시 발생하는 시스템 커널 패닉(DoS) 가능성
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 memset() 대신 memset_io()를 사용하도록 수정해야 합니다.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인합니다.