🇰🇷 한글 설명
Linux 커널의 Tiny SRCU 구현에서 스케줄러 락을 보유한 상태로 workqueue 락을 획득하여 발생하는 데드락(lockdep splat) 취약점이 해결되었습니다. 또한, 정리 과정 중 queued irq_work가 실행되어 발생할 수 있는 Use-After-Free 문제를 방지하기 위해 irq_work_sync()가 추가되었습니다.
💡 쉬운 설명
컴퓨터의 핵심 운영체제인 리눅스에서 작업 순서가 꼬여 시스템이 멈추거나, 메모리 오류로 인해 프로그램이 비정상적으로 종료될 수 있는 문제가 있었습니다. 이 문제는 작업 처리 방식을 개선하여 충돌이 발생하지 않도록 수정되었습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
srcu: Use irq_work to start GP in tiny SRCU
Tiny SRCU's srcu_gp_start_if_needed() directly calls schedule_work(),
which acquires the workqueue pool->lock.
This causes a lockdep splat when call_srcu() is called with a scheduler
lock held, due to:
call_srcu() [holding pi_lock]
srcu_gp_start_if_needed()
schedule_work() -> pool->lock
workqueue_init() / create_worker() [holding pool->lock]
wake_up_process() -> try_to_wake_up() -> pi_lock
Also add irq_work_sync() to cleanup_srcu_struct() to prevent a
use-after-free if a queued irq_work fires after cleanup begins.
Tested with rcutorture SRCU-T and no lockdep warnings.
[ Thanks to Boqun for similar fix in patch "rcu: Use an intermediate irq_work
to start process_srcu()" ]
📍 영향받는 시스템
Linux Kernel (Tiny SRCU를 사용하는 환경)
⚔️ 공격 벡터
로컬 권한을 가진 공격자가 특정 커널 작업 부하를 유도하여 시스템 교착 상태 또는 메모리 오류 유발 가능
🛡️ 대응 방법
최신 보안 패치가 적용된 Linux 커널 버전으로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 패치 버전 이후인지 확인