CVE-2026-31488 in Linuxinfo

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.

Zuständig

Linux

Reservieren

09.03.2026

Veröffentlichung

22.04.2026

Moderieren

akzeptiert

Eintrag

VDB-358866

CPE

bereit

EPSS

0.00015

KEV

nein

Aktivitäten

very low

Quellen

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!