🇰🇷 한글 설명
Linux 커널의 cpuidle 구성 요소에서 특정 플랫폼(PowerNV 시스템) 사용 시 발생하는 취약점입니다. 단일 유휴 상태가 폴링 상태(state 0)로만 존재할 경우, ladder governor가 잘못된 인덱스를 참조하여 NULL 콜백을 호출하고 시스템 충돌(Crash)을 유발할 수 있습니다.
💡 쉬운 설명
컴퓨터가 쉬는 상태를 관리하는 과정에서 계산 오류가 발생하여 시스템이 갑자기 멈추거나 꺼질 수 있는 문제입니다. 특정 하드웨어 환경에서 시스템이 잘못된 명령을 실행하려고 시도할 때 발생합니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
cpuidle: Skip governor when only one idle state is available
On certain platforms (PowerNV systems without a power-mgt DT node),
cpuidle may register only a single idle state. In cases where that
single state is a polling state (state 0), the ladder governor may
incorrectly treat state 1 as the first usable state and pass an
out-of-bounds index. This can lead to a NULL enter callback being
invoked, ultimately resulting in a system crash.
[ 13.342636] cpuidle-powernv : Only Snooze is available
[ 13.351854] Faulting instruction address: 0x00000000
[ 13.376489] NIP [0000000000000000] 0x0
[ 13.378351] LR [c000000001e01974] cpuidle_enter_state+0x2c4/0x668
Fix this by adding a bail-out in cpuidle_select() that returns state 0
directly when state_count <= 1, bypassing the governor and keeping the
tick running.
📍 영향받는 시스템
PowerNV DT 노드가 없는 PowerNV 시스템 기반의 Linux 커널
⚔️ 공격 벡터
로컬 시스템 환경 설정 및 특정 하드웨어 상태 유도 (Denial of Service)
🛡️ 대응 방법
cpuidle_select() 함수에 state_count가 1 이하일 경우 governor를 건너뛰고 즉시 state 0를 반환하도록 커널 패치 적용
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 패치 버전인지 배포판 보안 공지를 통해 확인