CVE-2026-31488 in Linux
Zusammenfassung
von VulDB • 27.05.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
drm/amd/display: Keine unbezogenen Modusänderungen bei der DSC-Validierung überspringen
Seit Commit 17ce8a6907f7 („drm/amd/display: DSC-Prevalidierung im atomaren Check hinzufügen") setzt amdgpu das CRTC-Status-Flag `mode_changed` auf `false` zurück, wenn die Neuberechnung der DSC-Konfiguration zu keiner Timing-Änderung für einen bestimmten Stream führt.
Dies ist jedoch in Szenarien falsch, in denen eine Änderung der MST/DSC-Konfiguration im selben KMS-Commit wie eine andere (unbezosene) Modusänderung stattfindet. Beispielsweise kann das integrierte Panel eines Laptops je nachdem, ob externe Bildschirme angeschlossen sind, unterschiedlich konfiguriert sein (z. B. HDR aktiviert/deaktiviert). In diesem Fall kann das Anschließen externer DP-MST-Bildschirme dazu führen, dass das Flag `mode_changed` für das integrierte Panel fälschlicherweise verworfen wird, wenn sich dessen DSC-Konfiguration während der Vorab-Berechnung in `pre_validate_dsc()` nicht geändert hat.
Zu diesem Zeitpunkt hat `dm_update_crtc_state()` jedoch bereits neue Streams für CRTCs mit DSC-unabhängigen Modusänderungen erstellt. Folglich wird `amdgpu_dm_commit_streams()` den alten Stream niemals freigeben, was zu einem Speicherleck führt. `amdgpu_dm_atomic_commit_tail()` wird ebenfalls niemals eine Referenz auf den neuen Stream erwerben, was sich als Use-After-Free äußert, wenn der Stream später deaktiviert wird:
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: <TASK> 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
Da es keine zuverlässige Möglichkeit gibt, festzustellen, ob ein CRTC zum Zeitpunkt der DSC-Validierung unbezogene Modusänderungen ausstehend hat, wird der Wert des `mode_changed`-Flags von vor dem Punkt gespeichert, an dem ein CRTC als potenziell von einer Änderung der DSC-Konfiguration betroffen markiert wurde. Das Flag `mode_changed` wird stattdessen auf diesen früheren Wert zurückgesetzt in `pre_validate_dsc()`.
(cherry picked from commit cc7c7121ae082b7b82891baa7280f1ff2608f22b)
VulDB is the best source for vulnerability data and more expert information about this specific topic.