🔍 CVE-2026-89856

8.4
CVSS Score
HIGH
2026-09-16
2026-10-19 09:18
✅ 완료

🇰🇷 한글 설명

Linux 커널의 qla2xxx SCSI 드라이버에서 MSI-X 벡터 수 계산 시 데이터 타입 범위 초과로 인한 정수 절단(truncation) 및 언더플로우 취약점이 발견되었습니다. 이로 인해 잘못된 메모리 할당(ZERO_SIZE_PTR)이 발생하여 커널 메모리 오염이나 시스템 충돌을 유발할 수 있습니다.

💡 쉬운 설명

특정 하드웨어가 잘못된 정보를 보내면 컴퓨터의 핵심 시스템인 커널이 계산 오류를 일으켜 멈추거나 망가질 수 있는 문제입니다. 공격자가 조작된 장치를 연결하면 시스템을 강제로 종료시킬 수 있습니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: scsi: qla2xxx: Clamp MSI-X derived queue counts to avoid truncation ha->msix_count is u16, but ha->max_req_queues, ha->max_rsp_queues and ha->max_qpairs are u8. Deriving the queue count as "ha->max_req_queues = ha->msix_count - 1" therefore truncates: a board (or a misconfigured/malicious hot-plugged device) advertising 257 MSI-X vectors yields msix_count - 1 == 256, which truncates to 0. An MSI-X count of 1 zeroes it as well, and in target mode the subsequent "ha->max_req_queues--" then underflows 0 to 255. When the count is 0, qla2x00_alloc_queues() calls kzalloc_objs(struct req_que *, 0), which returns ZERO_SIZE_PTR. That is not NULL, so the allocation check passes and the following "ha->req_q_map[0] = req" dereferences ZERO_SIZE_PTR, corrupting memory or crashing the kernel. Add qla_calc_queue_count() to clamp the derived value into [1, QLA_MAX_QUEUES - 1] so it always fits in u8 and is never zero, and use it at all three derivation sites (qla25xx_iospace_config(), qla83xx_iospace_config() and qla24xx_enable_msix()). Also guard the target-mode decrement so it cannot reintroduce a zero (which would in turn underflow max_qpairs).

📍 영향받는 시스템

Linux kernel (qla2xxx SCSI driver module)

⚔️ 공격 벡터

악의적으로 구성된 MSI-X 벡터를 광고하는 핫플러그 장치 연결을 통한 메모리 오염

🛡️ 대응 방법

커널 패치를 적용하여 MSI-X 기반 큐 카운트 계산 시 범위를 제한(clamping)하고 언더플로우를 방지해야 함

🔧 검증 코드

현재 실행 중인 커널 버전을 확인하여 해당 취약점이 수정된 최신 보안 패치 버전인지 확인합니다.

Shell / Script
uname -r

📊 CVSS Vector String

CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

💻 영향받는 소프트웨어

Linux Kernel