🇰🇷 한글 설명
Linux 커널의 coredump 모듈에서 coredump_finish()가 대기 중인 스레드를 해제할 때 RCU 보호 없이 wake_up_process()를 호출하는 문제가 해결되었습니다. 선점이나 스퓨리어스 웨이크업이 발생하면 스레드가 이미 해제된 메모리에서 pi_lock을 획득하려 할 수 있어, 이를 막기 위해 루프 전체를 RCU 임계 구역으로 감쌌습니다.
💡 쉬운 설명
프로그램이 충돌하며 메모리 덤프를 만들 때, 잠들어 있던 작업 조각이 깨어나는 과정에서 이미 사라진 작업을 건드릴 수 있는 문제가 있었습니다. 이번 수정으로 작업이 안전하게 깨어나도록 보호 장치를 추가했습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
coredump: hold RCU while releasing parked threads
coredump_finish() releases the parked threads by clearing ->task in
their core_thread entry and calling wake_up_process() on each of them.
It does that without holding a reference on the task and without being
inside rcu.
But calling wake_up_process(task) without rcu here isn't safe. A parked
thread doesn't need that wakeup to leave. A spurious wakeup or a
preemption after the store is enough for the task to go away.
So if the coredump client is preempted between the store and
wake_up_process() the thread can exit and be freed in the meantime and
try_to_wake_up() takes pi_lock in freed memory.
Hold rcu across the loop.
📍 영향받는 시스템
수정 이전의 Linux 커널 (coredump 기능을 사용하는 모든 배포판 및 버전, 정확한 범위는 커널 패치 이력 참조)
⚔️ 공격 벡터
로컬 사용자가 coredump 발생 시점의 스케줄링 타이밍을 조작해 해제된 메모리 접근을 유발할 가능성이 있음 (CVSS 7.0, 로컬 공격 기반으로 추정)
🛡️ 대응 방법
해당 수정이 포함된 최신 Linux 커널 버전으로 업데이트하고 재부팅합니다.
🔧 검증 코드
출력된 커널 버전을 배포판 보안 권고 또는 커널 changelog의 수정 버전과 비교하여, 해당 패치가 포함된 버전 이상이면 조치가 완료된 것입니다.