🇰🇷 한글 설명
리눅스 커널의 drm/drm_exec 모듈에서 num_objects가 0일 때 경합 중인 객체를 제대로 처리하지 못하는 취약점이 발견되었습니다. 이로 인해 특정 드라이버에서 잠금 해제 시도가 누락되어 무한 루프에 빠지는 현상이 발생할 수 있습니다.
💡 쉬운 설명
컴퓨터의 그래픽 처리 과정에서 자원을 사용하기 위해 순서를 기다리는 기능에 오류가 있습니다. 이 오류로 인해 시스템이 특정 상황에서 멈추거나 무한히 반복 작업을 수행하며 먹통이 될 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
drm/drm_exec: fix up contended obj when num_objects is 0
drm_exec_prepare_array() silently returns success without calling
drm_exec_lock_contended() when num_objects is zero. This breaks the
invariant upheld by drm_exec_lock_obj(), where every entry point into
the locking sequence must first attempt to lock any previously
contended object before proceeding.
Drivers that chain multiple drm_exec_prepare_array() calls per
drm_exec_until_all_locked() iteration (e.g. amdgpu's userq signal/wait
ioctls, which prepare separate read and write BO arrays) can pass an
empty array for one of the two calls. If contention is hit while
preparing the non-empty array, exec->contended is set and the loop
retries; on retry, the empty-array call preceding it is a no-op that
never clears exec->contended, so drm_exec_retry_on_contention()
immediately jumps back to the top of the loop without ever reaching
the call that would resolve the contention. This spins forever.
Fix it by having drm_exec_prepare_array() call drm_exec_lock_contended()
directly when num_objects is zero, so a pending contended object dont
loop infinitely.
📍 영향받는 시스템
Linux Kernel (drm/drm_exec 관련 모듈을 사용하는 시스템)
⚔️ 공격 벡터
로컬 사용자가 특정 그래픽 드라이버(예: amdgpu)의 ioctl 호출을 통해 자원 경합을 유도하여 시스템을 무한 루프에 빠뜨림
🛡️ 대응 방법
리눅스 커널을 최신 보안 패치가 적용된 버전으로 업데이트하십시오.
🔧 검증 코드
출력된 커널 버전을 확인하여 해당 취약점이 수정된 최신 버전인지 확인하십시오.