🇰🇷 한글 설명
Linux 커널의 x86/mce 구성 요소에서 CMCI(Machine Check Contention Interrupt) 탐색 이전에 폴링 타이머가 적절히 설정되지 않아 발생하는 취약점입니다. 이로 인해 타이머가 초기화되기 전에 수정되려 시도하면서 커널 경고 및 시스템 불안정을 유발할 수 있습니다.
💡 쉬운 설명
컴퓨터의 오류를 감지하는 기능이 작동할 때, 준비 작업이 끝나기도 전에 명령을 내려서 시스템에 오류가 발생하는 문제입니다. 이로 인해 컴퓨터가 갑자기 멈추거나 경고 메시지가 나타날 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
x86/mce: Set up the polling timer before CMCI discovery
I hit the following on one of my machines:
mce: CPU0 BANK15 CMCI inherited storm
------------[ cut here ]------------
ODEBUG: assert_init not available (active state 0) object: (____ptrval____) object type: timer_list hint: 0x0
WARNING: lib/debugobjects.c:632 at debug_object_assert_init+0x178/0x230, CPU#0: swapper/0/0
CPU: 0 UID: 0 PID: 0 Comm: swapper/0 Not tainted 7.2.0-rc5 #3 PREEMPTLAZY
RIP: 0010:debug_object_assert_init+0x18f/0x230
Call Trace:
<TASK>
__mod_timer
mce_timer_kick
cmci_discover
intel_init_cmci
mce_intel_feature_init
mcheck_cpu_init
identify_cpu
identify_boot_cpu
arch_cpu_finalize_init
start_kernel
A second splat follows right after, from timer_setup() finding that same
timer already queued:
ODEBUG: init active (active state 0) object: (____ptrval____) object type: timer_list hint: stub_timer+0x0/0x10
This is happening because CMCI storm detection is trying to modify the timer
before latter was properly set up.
Set up the timer first. __mcheck_cpu_setup_timer() only calls timer_setup(),
and depends on neither the generic nor the vendor init.
[ bp: Massage commit message. ]
📍 영향받는 시스템
Linux kernel (x86 architecture, specifically versions around 7.2.0-rc5 and earlier)
⚔️ 공격 벡터
Local/Physical (커널 내부 로직 오류로, 직접적인 원격 공격보다는 시스템 초기화 과정에서의 논리적 결함임)
🛡️ 대응 방법
커널 패치를 적용하여 CMCI 탐색 전 타이머가 먼저 설정되도록 업데이트해야 합니다.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인합니다.