🇰🇷 한글 설명
Linux 커널의 sched_ext 구성 요소에서 로컬 DSQ(Dispatch Queue)로 작업을 이동할 때 rq(runqueue) 추적 상태가 일치하지 않는 취약점이 발견되었습니다. 이로 인해 잠금(lock)이 전환되는 과정에서 잘못된 rq를 참조하게 되어 커널의 lockdep 어설션(assertion) 경고가 발생할 수 있습니다. 이를 해결하기 위해 rq 잠금 핸드오프 시 추적 상태를 업데이트하는 switch_rq_lock() 기능이 도입되었습니다.
💡 쉬운 설명
컴퓨터의 작업 처리 순서를 관리하는 시스템에서, 작업이 이동할 때 관리자가 들고 있는 '작업 목록표'가 실제 목록과 일치하지 않아 발생하는 오류입니다. 이 오류로 인해 시스템이 충돌하거나 예기치 않은 경고가 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
sched_ext: Preserve rq tracking across local DSQ dispatch
dispatch_to_local_dsq() can run from scx_bpf_dsq_move_to_local() while
ops.dispatch() has recorded the current rq. Moving a task to a local DSQ
may switch to the source or destination rq before synchronously invoking
ops.dequeue() through the following path:
SCX_CALL_OP(dispatch, rq)
ops.dispatch()
scx_bpf_dsq_move_to_local()
scx_flush_dispatch_buf()
finish_dispatch()
dispatch_to_local_dsq()
scx_dispatch_enqueue()
local_dsq_post_enq()
call_task_dequeue()
SCX_CALL_OP_TASK(dequeue, locked_rq, ...)
The nested callback saves the recorded rq and restores it on return. If
the rq tracking does not follow the lock switch, update_locked_rq() can
trigger the following lockdep assertion while restoring an rq which is
no longer held:
WARNING: kernel/sched/sched.h:1641 at call_task_dequeue+0x160/0x170
Call Trace:
scx_dispatch_enqueue+0x2b0/0x460
dispatch_to_local_dsq+0x138/0x230
scx_flush_dispatch_buf+0x1af/0x220
scx_bpf_dsq_move_to_local___v2+0xe2/0x1c0
bpf__sched_ext_ops_dispatch+0x4b/0xa7
do_pick_task_scx+0x3b6/0x910
__pick_next_task+0x105/0x1f0
__schedule+0x3e7/0x1980
Introduce switch_rq_lock() to update the tracking state together with
each rq lock handoff. Use it in dispatch_to_local_dsq(),
move_remote_task_to_local_dsq() and the in-balance paths of
scx_dsq_move(), ensuring that scx_locked_rq() consistently refers to the
rq whose lock is actually held throughout the lock dance.
📍 영향받는 시스템
Linux kernel (sched_ext 기능이 활성화된 버전)
⚔️ 공격 벡터
로컬 DSQ로 작업을 이동시키는 특정 스케줄링 경로를 유도하여 커널 잠금 불일치 유발
🛡️ 대응 방법
sched_ext의 rq 추적 로직이 수정된 최신 Linux 커널로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 패치된 최신 버전인지 확인하십시오.