🇰🇷 한글 설명
리눅스 커널의 drm/amd/display 드라이버에서 dcn35_set_drr() 함수와 dc_state_destruct() 함수 간의 레이스 컨디션(경쟁 상태) 취약점이 발견되었습니다. 인터럽트 처리 중 리소스가 해제되는 과정에서 NULL 포인터에 접근하게 되어 시스템 불안정이나 충돌을 유발할 수 있습니다.
💡 쉬운 설명
컴퓨터의 화면을 조절하는 프로그램이 데이터를 지우는 동시에 사용하려고 할 때 발생하는 충돌 문제입니다. 이 과정에서 잘못된 메모리 주소를 참조하게 되어 시스템이 멈추거나 오류가 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
drm/amd/display: Avoid race between dcn35_set_drr() and dc_state_destruct()
dc_state_destruct() nulls the resource context of the DC state. The pipe
context passed to dcn35_set_drr() is a member of this resource context.
If dc_state_destruct() is called parallel to the IRQ processing (which
calls dcn35_set_drr() at some point), we can end up using already nulled
function callback fields of struct stream_resource.
The logic in dcn35_set_drr() already tries to avoid this, by checking tg
against NULL. But if the nulling happens exactly after the NULL check and
before the next access, then we get a race.
Avoid this by copying tg first to a local variable, and then use this
variable for all the operations. This should work, as long as nobody
frees the resource pool where the timing generators live.
(cherry picked from commit 0607a50c004798a96e62c089a4c34c220179dcb5)
📍 영향받는 시스템
AMD GPU를 사용하는 리눅스 커널 기반 시스템 (DCN3.5 관련 드라이버 포함)
⚔️ 공격 벡터
로컬 공격자가 특정 하드웨어 인터럽트 상황을 유도하여 커널 패닉 또는 시스템 충돌을 일으킬 수 있음
🛡️ 대응 방법
AMD 디스플레이 드라이버의 레이스 컨디션 패치가 적용된 최신 리눅스 커널로 업데이트
🔧 검증 코드
출력된 커널 버전을 확인하여 해당 취약점이 해결된 패치 버전 이상인지 확인