🇰🇷 한글 설명
Linux 커널의 drm, fbcon, vga_switcheroo 구성 요소에서 fbcon 설정 시 발생하는 레이스 컨디션 취약점입니다. vga_switcheroo_client_fb_set() 함수가 콘솔 락을 확보하지 않아 fbcon_remap_all() 호출 시 경계 외(OOB) 메모리 접근이 발생할 수 있습니다.
💡 쉬운 설명
그래픽 출력 장치를 전환하는 과정에서 시스템이 동시에 여러 작업을 처리하려다 충돌이 발생하는 문제입니다. 이로 인해 잘못된 메모리 영역에 접근하여 시스템 오류가 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
drm, fbcon, vga_switcheroo: Avoid race condition in fbcon setup
Protect vga_switcheroo_client_fb_set() with console lock. Avoids OOB
access in fbcon_remap_all(). Without holding the console lock the call
races with switching outputs.
VGA switcheroo calls fbcon_remap_all() when switching clients. The fbcon
function uses struct fb_info.node, which is set by register_framebuffer().
As the fb-helper code currently sets up VGA switcheroo before registering
the framebuffer, the value of node is -1 and therefore not a legal value.
For example, fbcon uses the value within set_con2fb_map() [1] as an index
into an array.
Moving vga_switcheroo_client_fb_set() after register_framebuffer() can
result in VGA switching that does not switch fbcon correctly.
Therefore move vga_switcheroo_client_fb_set() under fbcon_fb_registered(),
which already holds the console lock. Fbdev calls fbcon_fb_registered()
from within register_framebuffer(). Serializes the helper with VGA
switcheroo's call to fbcon_remap_all().
Although vga_switcheroo_client_fb_set() takes an instance of struct fb_info
as parameter, it really only needs the contained fbcon state. Moving the
call to fbcon initialization is therefore cleaner than before. Only amdgpu,
i915, nouveau and radeon support vga_switcheroo. For all other drivers,
this change does nothing.
📍 영향받는 시스템
Linux Kernel (amdgpu, i915, nouveau, radeon 드라이버를 사용하는 시스템)
⚔️ 공격 벡터
로컬 공격자가 VGA 출력 전환을 유도하여 레이스 컨디션을 발생시킴
🛡️ 대응 방법
vga_switcheroo_client_fb_set() 호출을 콘솔 락을 보유한 fbcon_fb_registered() 내부로 이동시킨 최신 커널로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 패치가 적용된 최신 보안 업데이트 버전인지 확인
💻 영향받는 소프트웨어
NVIDIA vGPU Guest Driver for Linux