🇰🇷 한글 설명
Linux 커널의 qla2xxx SCSI 드라이버에서 qla2x00_error_entry() 함수가 req_q_map을 두 번 읽는 과정에서 발생하는 NULL 포인터 역참조 취약점입니다. 큐 해제 과정에서 인터럽트가 발생할 경우, 첫 번째 읽기와 두 번째 읽기 사이의 간극으로 인해 NULL 값이 할당되어 시스템 충돌이 발생할 수 있습니다.
💡 쉬운 설명
컴퓨터 부품을 관리하는 프로그램이 데이터를 확인하는 과정에서, 데이터가 사라지는 찰나의 순간을 제대로 처리하지 못해 발생하는 오류입니다. 이 오류가 발생하면 시스템이 갑자기 멈추거나 재부팅될 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
scsi: qla2xxx: Avoid req_q_map double-read in qla2x00_error_entry()
qla2x00_error_entry() reads ha->req_q_map[que] twice: once for the NULL
check and again when assigning it to req. The map slot is cleared by
qla25xx_free_req_que() (ha->req_q_map[que_id] = NULL under mq_lock)
during queue teardown, while the response-queue interrupt that drives
qla2x00_error_entry() is still registered (the IRQ is released later in
qla25xx_free_rsp_que()). If the slot is set to NULL between the two
reads, req becomes NULL and is dereferenced.
Read the slot once into req and NULL-check the local before use. mq_lock
is a mutex and cannot be taken from interrupt context, so the single
read plus local check is the appropriate fix for the reported NULL
dereference.
📍 영향받는 시스템
Linux kernel (qla2xxx SCSI driver 포함 버전)
⚔️ 공격 벡터
특정 하드웨어 인터럽트 상황을 유도하여 발생하는 Race Condition (경쟁 상태)
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하십시오.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 패치 버전 이후인지 확인하십시오.