🇰🇷 한글 설명
Linux 커널의 sched_ext 구성 요소에서 scx_cgroup_lock() 함수가 잠금 순서를 잘못 처리하여 데드락(교착 상태)이 발생할 수 있는 취약점입니다. cgroup_lock()과 rwsem 간의 잠금 순서가 엇갈리면서 cgroup 삭제 및 설정 작업이 서로를 기다리며 시스템이 멈출 수 있습니다.
💡 쉬운 설명
컴퓨터의 작업 순서를 정하는 규칙이 서로 꼬여서 시스템이 아무것도 못 하고 멈춰버리는 현상이 발생할 수 있습니다. 특정 설정 변경과 삭제 작업이 동시에 일어날 때 발생합니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
sched_ext: Take cgroup_lock() first in scx_cgroup_lock()
scx_cgroup_lock() write-locks scx_cgroup_ops_rwsem and then takes
cgroup_lock(), which can deadlock through kernfs:
scx enable/disable cgroup rmdir cpu.weight write
------------------ ------------ ----------------
cgroup_lock()
percpu_down_write(rwsem)
cgroup_lock()
kernfs_get_active()
percpu_down_read(rwsem)
kernfs_drain()
The enable path waits for the rmdir to release cgroup_mutex. The rmdir,
deactivating the cpu controller's files, waits in kernfs_drain() for the
write's active reference. The write, in scx_group_set_weight(), waits for
the rwsem behind the pending writer.
Take cgroup_lock() first. The set_* paths take no cgroup locks inside the
read side, so a pending write-lock then only waits for read sections that
always run to completion, and no dependency from the rwsem back to
cgroup_mutex remains.
📍 영향받는 시스템
Linux kernel (sched_ext 기능이 포함된 버전)
⚔️ 공격 벡터
로컬 사용자가 cgroup 설정 변경 및 삭제 작업을 동시에 수행하여 시스템 데드락 유도
🛡️ 대응 방법
scx_cgroup_lock()에서 cgroup_lock()을 먼저 획득하도록 수정된 최신 Linux 커널로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 패치된 최신 버전인지 확인합니다.