🇰🇷 한글 설명
Linux 커널의 DRM(Direct Rendering Manager) 구성 요소에서 데드락 처리 중 동일한 프레임버퍼(fb)를 중복하여 참조 해제하는 취약점이 발견되었습니다. 이로 인해 사용 중인 프레임버퍼가 조기에 해제되어 시스템 오류나 커널 패닉을 유발할 수 있습니다.
💡 쉬운 설명
컴퓨터 화면을 그리는 과정에서 실수로 이미 사용 중인 메모리를 강제로 삭제해버리는 버그입니다. 이 버그가 발생하면 화면이 멈추거나 컴퓨터 시스템이 갑자기 꺼질 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
drm: Don't unref the same fb many times by mistake due to deadlock handling
If we get a deadlock after the fb lookup in drm_mode_page_flip_ioctl()
we proceed to unref the fb and then retry the whole thing from the top.
But we forget to reset the fb pointer back to NULL, and so if we then
get another error during the retry, before the fb lookup, we proceed
the unref the same fb again without having gotten another reference.
The end result is that the fb will (eventually) end up being freed
while it's still in use.
Reset fb to NULL once we've unreffed it to avoid doing it again
until we've done another fb lookup.
This turned out to be pretty easy to hit on a DG2 when doing async
flips (and CONFIG_DEBUG_WW_MUTEX_SLOWPATH=y). The first symptom I
saw that drm_closefb() simply got stuck in a busy loop while walking
the framebuffer list. Fortunately I was able to convince it to oops
instead, and from there it was easier to track down the culprit.
📍 영향받는 시스템
Linux Kernel (DRM 드라이버를 사용하는 시스템, 특히 DG2 GPU 관련 환경)
⚔️ 공격 벡터
비동기 페이지 플립(async flips)을 수행하는 특정 하드웨어 환경에서 데드락을 유발하여 메모리 참조 오류를 일으킴
🛡️ 대응 방법
해당 취약점이 수정된 최신 버전의 Linux 커널로 업데이트하십시오.
🔧 검증 코드
출력된 커널 버전을 확인하여 해당 취약점이 패치된 버전인지 보안 공지(CVE-2023-52486)와 대조하십시오.