CVE-2026-31488 in Linux
요약
\~에 의해 VulDB • 2026. 05. 10.
리눅스 커널에서 다음 취약점이 해결되었습니다:
drm/amd/display: DSC 검증 중 관련 없는 모드 변경을 건너뛰지 않도록 수정
커밋 17ce8a6907f7("drm/amd/display: atomic check에서 DSC 사전 검증 추가")부터 amdgpu는 특정 스트림에 대해 타이밍 변경이 발생하지 않는 경우 DSC 구성을 재계산할 때 CRTC 상태의 mode_changed 플래그를 false로 초기화합니다.
그러나 MST/DSC 구성 변경이 다른(관련 없는) 모드 변경과 동일한 KMS 커밋에서 발생하는 시나리오에서는 이것이 잘못되었습니다. 예를 들어, 노트북의 내장 패널은 외부 화면이 연결되어 있는지 여부에 따라(HDR 활성화/비활성화 등) 다르게 구성될 수 있습니다. 이 경우 외부 DP-MST 화면을 연결하면 pre_validate_dsc()에서의 사전 계산 중 내장 패널의 DSC 구성이 변경되지 않았기 때문에 해당 패널에 대한 mode_changed 플래그가 잘못 제거될 수 있습니다.
이 시점에서 dm_update_crtc_state()는 DSC에 독립적인 모드 변경이 있는 CRTC에 대해 새로운 스트림을 이미 생성했습니다. 이에 따라 amdgpu_dm_commit_streams()는 이전 스트림을 해제하지 않게 되어 메모리 누수가 발생합니다. 또한 amdgpu_dm_atomic_commit_tail()은 새로운 스트림에 대한 참조를 획득하지도 않으며, 이는 나중에 스트림이 비활성화될 때 use-after-free로 나타납니다:
BUG: KASAN: use-after-free in dc_stream_release+0x25/0x90 [amdgpu]
Write of size 4 at addr ffff88813d836524 by task kworker/9:9/29977
Workqueue: events drm_mode_rmfb_work_fn Call Trace: dump_stack_lvl+0x6e/0xa0 print_address_description.constprop.0+0x88/0x320 ? dc_stream_release+0x25/0x90 [amdgpu]
print_report+0xfc/0x1ff ? srso_alias_return_thunk+0x5/0xfbef5 ? __virt_addr_valid+0x225/0x4e0 ? dc_stream_release+0x25/0x90 [amdgpu]
kasan_report+0xe1/0x180 ? dc_stream_release+0x25/0x90 [amdgpu]
kasan_check_range+0x125/0x200 dc_stream_release+0x25/0x90 [amdgpu]
dc_state_destruct+0x14d/0x5c0 [amdgpu]
dc_state_release.part.0+0x4e/0x130 [amdgpu]
dm_atomic_destroy_state+0x3f/0x70 [amdgpu]
drm_atomic_state_default_clear+0x8ee/0xf30 ? drm_mode_object_put.part.0+0xb1/0x130 __drm_atomic_state_free+0x15c/0x2d0 atomic_remove_fb+0x67e/0x980
DSC 검증 시점에 CRTC에 관련 없는 모드 변경이 대기 중인지 여부를 확인할 수 있는 신뢰할 수 있는 방법이 없으므로, CRTC가 DSC 구성 변경으로 인해 잠재적으로 영향을 받는 것으로 표시되기 전의 mode_changed 플래그 값을 기억해 둡니다. pre_validate_dsc()에서 mode_changed 플래그를 이 이전 값으로 재설정합니다.
(cherry picked from commit cc7c7121ae082b7b82891baa7280f1ff2608f22b)
If you want to get the best quality for vulnerability data then you always have to consider VulDB.