🇰🇷 한글 설명
Linux 커널의 RDMA/core 구성 요소에서 사용자 공간으로부터 전달받은 cpu_id 값을 검증 없이 cpumask_test_cpu() 함수에 전달하여 발생하는 취약점입니다. 이로 인해 유효 범위를 벗어난 메모리 읽기(Out-of-bounds read)가 발생하거나, 특정 설정 환경에서 시스템 패닉 및 재부팅이 발생할 수 있습니다.
💡 쉬운 설명
사용자가 잘못된 CPU 번호를 입력했을 때 시스템이 이를 확인하지 않고 그대로 처리하여 메모리 오류를 일으키거나 컴퓨터를 강제로 재부팅시킬 수 있는 문제입니다. 시스템이 예상치 못한 동작을 하거나 멈출 수 있는 위험이 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
RDMA/core: Validate cpu_id against nr_cpu_ids in DMAH alloc
The cpu_id attribute supplied by user space through
UVERBS_ATTR_ALLOC_DMAH_CPU_ID is passed directly to cpumask_test_cpu()
without first verifying that the value is within the valid CPU range.
Passing such untrusted data to cpumask_test_cpu() may lead to an
out-of-bounds read of the underlying cpumask bitmap: the helper expands
to a test_bit() that indexes the bitmap by cpu_id / BITS_PER_LONG with
no bound check.
In addition, on kernels built with CONFIG_DEBUG_PER_CPU_MAPS it trips
the WARN_ON_ONCE() in cpumask_check(); combined with panic_on_warn this
turns a bad user input into a machine reboot.
Reject any cpu_id that is not smaller than nr_cpu_ids with -EINVAL
before it is used.
Reported by Smatch.
📍 영향받는 시스템
RDMA 기능을 사용하는 Linux 커널 (cpu_id 검증 로직이 수정되기 전 버전)
⚔️ 공격 벡터
사용자 공간에서 UVERBS_ATTR_ALLOC_DMAH_CPU_ID 속성을 통해 조작된 cpu_id 값을 전달
🛡️ 대응 방법
해당 취약점이 해결된 최신 Linux 커널 버전으로 업데이트하거나, cpu_id가 nr_cpu_ids 범위 내에 있는지 확인하는 패치를 적용
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 패치된 보안 업데이트 버전인지 배포판 보안 공지를 통해 확인