🇰🇷 한글 설명
Linux 커널의 ACPI processor_idle 기능에서 함수 추적(ftrace) 또는 Kprobes가 활성화된 경우, 저전력 유휴 상태(LPI) 진입 시 RCU 경고(splat)가 발생하는 취약점입니다. 이 문제는 acpi_idle_lpi_enter 함수가 RCU가 비활성화된 상태에서 호출되어 발생하며, 해당 함수를 __cpuidle로 표시하여 ftrace 추적을 방지함으로써 해결되었습니다.
💡 쉬운 설명
컴퓨터가 절전 모드로 들어갈 때 시스템의 활동을 기록하는 기능이 충돌을 일으켜 오류 경고를 발생시키는 문제입니다. 이로 인해 시스템 성능에 영향을 주거나 불필요한 오류 로그가 쌓일 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
ACPI: processor_idle: Mark LPI enter functions as __cpuidle
When function tracing or Kprobes is enabled, entering an ACPI Low
Power Idle (LPI) state triggers the following RCU splat:
RCU not on for: acpi_idle_lpi_enter+0x4/0xd8
WARNING: CPU: 8 PID: 0 at include/linux/trace_recursion.h:162 function_trace_call+0x1e8/0x228
The acpi_idle_lpi_enter() function is invoked within the cpuidle
path after RCU has already been disabled for the current local CPU.
Consequently, ftrace's function_trace_call() expects RCU to be
actively watching before recording trace data, emitting a warning
if it is not.
Fix this by annotating acpi_idle_lpi_enter(), the generic __weak
stub, and the RISC-V implementation of acpi_processor_ffh_lpi_enter()
with __cpuidle. This moves these functions into the '.cpuidle.text'
section, implicitly disabling ftrace instrumentation (notrace) along
this sensitive path and preventing trace-induced RCU warnings during
idle entry.
📍 영향받는 시스템
Linux Kernel (ACPI LPI 기능 및 ftrace/Kprobes 사용 환경)
⚔️ 공격 벡터
직접적인 공격은 불가능하며, 시스템 모니터링 도구 사용 시 발생하는 내부 로직 오류입니다.
🛡️ 대응 방법
커널 패치를 적용하여 acpi_idle_lpi_enter 함수에 __cpuidle 어노테이션을 추가해야 합니다.
🔧 검증 코드
출력된 커널 버전이 해당 패치가 적용된 최신 보안 업데이트 버전인지 확인합니다.