🇰🇷 한글 설명
Linux 커널의 rtmutex 잠금 메커니즘에서 데드락 감지 시 대기자(waiter)가 적절히 등록되지 않아 발생하는 Null 포인터 역참조 취약점입니다. FUTEX_CMP_REQUEUE_PI 호출 과정에서 잘못된 메모리 접근이 발생하여 시스템 불안정성을 초래할 수 있습니다.
💡 쉬운 설명
컴퓨터 운영체제의 핵심 기능 중 하나인 '잠금(Locking)' 처리 과정에서 오류가 발생하여 시스템이 멈추거나 충돌할 수 있는 문제입니다. 특정 상황에서 프로그램이 존재하지 않는 메모리 주소를 참조하려고 시도할 때 발생합니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
locking/rtmutex: Skip remove_waiter() when waiter is not enqueued
syzbot triggered the following splat in remove_waiter() via
FUTEX_CMP_REQUEUE_PI:
KASAN: null-ptr-deref in range [0x0000000000000a88-0x0000000000000a8f]
class_raw_spinlock_constructor
remove_waiter+0x159/0x1200 kernel/locking/rtmutex.c:1561
rt_mutex_start_proxy_lock+0x103/0x120
futex_requeue+0x10e4/0x20d0
__x64_sys_futex+0x34f/0x4d0
task_blocks_on_rt_mutex() does not arm the waiter upon deadlock detection,
leaving waiter->task nil, where 3bfdc63936dd ("rtmutex: Use waiter::task instead
of current in remove_waiter()") made this fatal.
Furthermore, rt_mutex_start_proxy_lock() should not be calling into remove_waiter()
upon a successfully grabbing the rtmutex. 1a1fb985f2e2 ("futex: Handle early deadlock
return correctly"), moved the remove_waiter() out of __rt_mutex_start_proxy_lock()
(where 'ret' was only ever 0 or < 0) into the wrapper. Tighten this check to
account for try_to_take_rt_mutex().
📍 영향받는 시스템
Linux Kernel (rtmutex 및 futex 관련 모듈을 사용하는 버전)
⚔️ 공격 벡터
로컬 사용자가 특수하게 조작된 futex 시스템 호출을 통해 커널 메모리 오류 유도
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트
🔧 검증 코드
출력된 커널 버전이 취약점이 해결된 패치 버전 이후인지 확인