🇰🇷 한글 설명
Linux 커널의 rxrpc 모듈에서 call timer 시작과 call 파괴 과정 사이에 레이스 컨디션(Race Condition)이 발생합니다. 패킷 입력 루틴이 RCU read lock만 보유한 상태에서 실행되어, 타이머가 이미 중지되었음에도 불구하고 다시 시작될 수 있으며 이로 인해 메모리 해제된 타이머에 접근하여 시스템 오류(Oops)가 발생할 수 있습니다.
💡 쉬운 설명
데이터를 처리하는 타이머가 작동하는 도중에 해당 데이터가 갑자기 삭제되어 컴퓨터 시스템이 충돌하거나 멈출 수 있는 문제입니다. 타이머가 이미 사라진 데이터를 다시 사용하려고 시도할 때 발생하는 오류입니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
rxrpc: Fix call timer start racing with call destruction
The rxrpc_call struct has a timer used to handle various timed events
relating to a call. This timer can get started from the packet input
routines that are run in softirq mode with just the RCU read lock held.
Unfortunately, because only the RCU read lock is held - and neither ref or
other lock is taken - the call can start getting destroyed at the same time
a packet comes in addressed to that call. This causes the timer - which
was already stopped - to get restarted. Later, the timer dispatch code may
then oops if the timer got deallocated first.
Fix this by trying to take a ref on the rxrpc_call struct and, if
successful, passing that ref along to the timer. If the timer was already
running, the ref is discarded.
The timer completion routine can then pass the ref along to the call's work
item when it queues it. If the timer or work item where already
queued/running, the extra ref is discarded.
📍 영향받는 시스템
rxrpc 모듈을 사용하는 Linux 커널 버전
⚔️ 공격 벡터
특정 네트워크 패킷을 전송하여 rxrpc 호출 타이머와 데이터 파괴 프로세스 간의 타이밍 충돌 유도
🛡️ 대응 방법
rxrpc_call 구조체에 대한 참조 카운팅(refcount)을 적용하여 타이머가 실행되는 동안 데이터가 삭제되지 않도록 수정된 최신 커널로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 패치된 최신 보안 업데이트 버전인지 확인