🇰🇷 한글 설명
Linux 커널의 sched_ext 구성 요소에서 cgroup 이동 시 발생하는 잘못된 경고(WARNING) 취약점입니다. 특정 시나리오에서 cgroup의 CSS 식별자가 변경될 때 scx_cgroup_move_task() 함수가 NULL 포인터를 참조하여 불필요한 커널 경고를 발생시킵니다.
💡 쉬운 설명
시스템의 자원 관리 방식이 바뀔 때, 컴퓨터 내부에서 실제로는 문제가 없는데도 오류 메시지가 잘못 출력되는 현상입니다. 이는 시스템 성능에 직접적인 해를 끼치지는 않지만, 불필요한 로그를 생성하여 혼란을 줄 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
sched_ext: Don't warn on NULL cgrp_moving_from in scx_cgroup_move_task()
A WARN fires when systemd's user manager writes "+cpu +memory +pids" to
its own subtree_control while a sched_ext scheduler is loaded:
WARNING: at kernel/sched/ext.c:3227 scx_cgroup_move_task+0xa8/0xb0
scx_cgroup_move_task+0xa8/0xb0
sched_move_task+0x134/0x290
cpu_cgroup_attach+0x39/0x70
cgroup_migrate_execute+0x37d/0x450
cgroup_update_dfl_csses+0x1e3/0x270
cgroup_subtree_control_write+0x3e7/0x440
scx_cgroup_can_attach() arms cgrp_moving_from only when a task's cpu
cgroup changes. It can still be NULL when scx_cgroup_move_task() runs,
through this sequence:
Step Result
--------------------------------- ----------------------------------
1. cpu enabled on cgroup G cpu css = A
2. cpu toggled off then on for G A killed, B created (same cgroup)
3. an exiting task keeps A alive migration skips it, A now stale
4. +memory migrates G stale A vs current B pulls cpu in
5. cpu attach runs for all tasks hits a live, cpu-unchanged task
6. scx_cgroup_move_task() on it cgrp_moving_from NULL -> WARN
The mismatch is that scx_cgroup_can_attach() keys on cgroup identity
while migration drives the move on css identity, so a NULL cgrp_moving_from
here is a legitimate css-only migration, not a missing prep.
The call is already gated on cgrp_moving_from, so just drop the warning.
ops.cgroup_prep_move() and ops.cgroup_move() stay paired.
📍 영향받는 시스템
sched_ext 스케줄러가 로드된 Linux 커널 버전
⚔️ 공격 벡터
로컬 시스템에서 cgroup 설정을 변경하여 경고를 유도하는 방식 (DoS 위험은 낮음)
🛡️ 대응 방법
sched_ext 관련 패치가 적용된 최신 Linux 커널로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인합니다.