🇰🇷 한글 설명
Linux 커널의 AMD DRM 드라이버에서 DCE8 클래스 ASIC(예: Bonaire) 사용 시 DP MST 스트림 인코더 할당 과정에서 발생하는 취약점입니다. 디지털 인코더가 부족할 경우 부적절하게 아날로그 DAC 인코더를 선택하게 되며, 이로 인해 NULL 함수 포인터 참조가 발생하여 커널 패닉(Crash)이 유발됩니다.
💡 쉬운 설명
AMD 그래픽 카드를 사용하여 여러 대의 모니터를 연결할 때, 시스템이 잘못된 부품을 사용하려고 시도하다가 컴퓨터가 갑자기 멈추거나 꺼지는 현상입니다. 모니터를 연결하는 과정에서 소프트웨어 오류로 인해 시스템이 충돌하는 문제입니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
drm/amd/display: dce100: skip non-DP stream encoders for DP MST
On DCE8-class ASICs (e.g. Bonaire), the resource pool contains digital
DIG stream encoders plus one analog DAC encoder. When assigning a stream
encoder for a second DisplayPort MST stream, if the preferred digital
encoder is already acquired, dce100_find_first_free_match_stream_enc_for_link()
falls back to the first free pool entry. That entry may be the analog
encoder, whose funcs table lacks DP hooks such as dp_set_stream_attribute.
The subsequent atomic commit then dereferences NULL function pointers in
link_set_dpms_on() and crashes.
Skip encoders without dp_set_stream_attribute when the stream uses a DP
signal (including MST). Use dc_is_dp_signal(stream->signal) for the MST
fallback path instead of checking only the link connector signal.
Tested on:
- GPU: AMD Radeon R7 260X (Bonaire / DCE8)
- Board: Supermicro C9X299-PG300
- Setup: DP MST daisy chain, hotplug second monitor or have it connected on boot
- Kernel: 7.1.3 (issue observed since 6.19)
- Result: kernel oops without patch; dual monitors stable with patch
(cherry picked from commit 28ec64943e3ee4d9b8d30cea61e380f1429953a8)
📍 영향받는 시스템
Linux kernel (6.19 버전 이후 포함, AMD Radeon R7 260X 등 DCE8 기반 GPU 사용 시스템)
⚔️ 공격 벡터
로컬 공격자가 특정 하드웨어 구성(DP MST 데이지 체인)을 유도하여 커널 크래시를 발생시킬 수 있음
🛡️ 대응 방법
커널 패치(commit 28ec64943e3ee4d9b8d30cea61e380f1429953a8 적용 버전)를 적용하여 최신 커널로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 패치 버전 이후인지 확인합니다.
💻 영향받는 소프트웨어
NVIDIA vGPU Guest Driver for Linux