🇰🇷 한글 설명
Linux 커널의 nvme-pci 드라이버에서 nvme_setup_descriptor_pools 함수가 배열 범위를 벗어난 메모리에 접근하는 취약점이 발견되었습니다. NUMA를 지원하지 않는 커널에서 NUMA_NO_NODE(-1) 값이 부호 없는 정수(unsigned)로 처리되어 매우 큰 인덱스로 변환됨으로써 페이지 폴트와 시스템 오류를 유발합니다.
💡 쉬운 설명
컴퓨터의 저장 장치(NVMe)를 관리하는 프로그램이 잘못된 숫자를 사용하여 메모리의 엉뚱한 곳을 건드리는 문제입니다. 이로 인해 시스템이 멈추거나 저장 장치가 정상적으로 인식되지 않을 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
nvme-pci: fix out-of-bounds access in nvme_setup_descriptor_pools
nvme_setup_descriptor_pools() indexes dev->descriptor_pools[] using the
numa_node forwarded from hctx->numa_node by its single caller,
nvme_init_hctx_common(). On a non-NUMA kernel hctx->numa_node is
NUMA_NO_NODE (-1). Because the parameter was declared 'unsigned', the
value becomes UINT_MAX and the index walks off the array (sized to
nr_node_ids), faulting during nvme_alloc_ns() and leaving the namespace
without a /dev node.
Reproduces on any NVMe controller probed by a CONFIG_NUMA=n kernel:
BUG: unable to handle page fault for address: ffff889101603d38
RIP: 0010:nvme_init_hctx_common+0x5a/0x190 [nvme]
Call Trace:
nvme_init_hctx+0x10/0x20 [nvme]
nvme_alloc_ns+0x9e/0xa10 [nvme_core]
nvme_scan_ns+0x301/0x3b0 [nvme_core]
nvme_scan_ns_async+0x23/0x30 [nvme_core]
Switch the parameter to int and fall back to node 0 when it is
NUMA_NO_NODE; node 0 is always present.
📍 영향받는 시스템
CONFIG_NUMA=n 설정이 적용된 Linux 커널 기반 시스템
⚔️ 공격 벡터
로컬 시스템에서 NVMe 컨트롤러를 프로브(Probe)할 때 발생하는 시스템 오류 유발
🛡️ 대응 방법
해당 취약점이 수정된 최신 버전의 Linux 커널로 업데이트
🔧 검증 코드
출력된 커널 버전이 취약점이 패치된 최신 릴리스 버전인지 확인