🇰🇷 한글 설명
Linux 커널의 tracing osnoise 모듈에서 CPU 핫플러그(오프라인 전환) 중 교착 상태(deadlock)가 발생할 수 있는 문제입니다. cpus_read_lock()과 interface_lock 뮤텍스의 획득 순서가 뒤바뀌어 있어 발생하며, 이를 교환하여 해결했습니다.
💡 쉬운 설명
CPU를 끄는 작업과 추적 기능이 서로 상대방의 잠금이 풀리기를 기다리며 멈춰버릴 수 있는 버그입니다. 잠금을 잡는 순서를 바꿔서 이 멈춤 현상을 막았습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
tracing: Fix potential deadlock in cpu hotplug with osnoise
The following sequence may leads deadlock in cpu hotplug:
task1 task2 task3
----- ----- -----
mutex_lock(&interface_lock)
[CPU GOING OFFLINE]
cpus_write_lock();
osnoise_cpu_die();
kthread_stop(task3);
wait_for_completion();
osnoise_sleep();
mutex_lock(&interface_lock);
cpus_read_lock();
[DEAD LOCK]
Fix by swap the order of cpus_read_lock() and mutex_lock(&interface_lock).
📍 영향받는 시스템
osnoise 트레이서가 포함된 Linux 커널 (수정 커밋 이전 버전, CPU 핫플러그를 사용하는 시스템)
⚔️ 공격 벡터
로컬 권한을 가진 사용자가 osnoise 추적을 사용하면서 CPU 온/오프라인 전환을 반복 유발해 시스템 서비스를 멈추게 하는 DoS 형태로 악용될 수 있습니다.
🛡️ 대응 방법
커널을 CVE-2026-31480 수정이 포함된 최신 안정 버전으로 업데이트하고 재부팅합니다.
🔧 검증 코드
출력된 커널 버전이 배포판의 수정 버전 이상인지 확인하고, osnoise 심볼이 보이면 해당 모듈이 존재하므로 패치 적용 여부를 배포판 보안 공지로 대조합니다.
uname -r && (grep -i osnoise /proc/kallsyms 2>/dev/null | head -n 3)