data built 2026-10-19T13:16:53Z

Look up another CVE · open CVE-2026-89819 in the interactive tracker

CVE-2026-89819

drm/amd/display: validate plane degamma LUT size for private color prop

7.8 EPSS 0.2% AV:L

Published 2026-09-16 (33 days ago) by the Linux kernel CNA. Subsystem drivers/gpu. Debian urgency: unimportant.

What to do, per Debian release

Debian's own status for CVE-2026-89819 in every release this site tracks, and what each one means in practice. Every status below is the one the Debian Security Team publishes for this CVE. source

ReleaseStatus VersionWhat this means
Debian 12bookwormnot affected6.1.190-1Nothing to do. bookworm never shipped the vulnerable code.
Debian 13trixiefixedDSA-6528-1 · 2026-09-29 · text6.12.111-1Update the kernel and reboot. DSA-6528-1 shipped the fix on 2026-09-29, in 6.12.111-1. A running kernel keeps the old code until the machine restarts.
Debian 14forkyfixed7.2.6-1Update the kernel and reboot. Fixed in 7.2.6-1. A running kernel keeps the old code until the machine restarts.
Debian unstablesidfixed7.2.6-1Update the kernel and reboot. Fixed in 7.2.6-1. A running kernel keeps the old code until the machine restarts.
Debian 12bookworm · linux-6.12fixedDLA-4817-1 · 2026-10-04 · text6.12.111-1~deb12u1Update the kernel and reboot. DLA-4817-1 shipped the fix on 2026-10-04, in 6.12.111-1~deb12u1. A running kernel keeps the old code until the machine restarts.

The vulnerability

What the bug is

Unlike the CRTC degamma path, which is guarded by amdgpu_dm_verify_lut_sizes(), the per-plane degamma LUT size was never validated before use. __set_dm_plane_degamma() passed the user-supplied size straight into __is_lut_linear() and, for a non-linear LUT, into __set_input_tf() -> __drm_lut_to_dc_gamma(), the latter always iterating MAX_COLOR_LUT_ENTRIES entries regardless of the actual LUT size. A malformed AMD_PLANE_DEGAMMA_LUT blob (e.g. a single entry) could thus trigger a divide-by-zero in __is_lut_linear() or an out-of-bounds read in __drm_lut_to_dc_gamma(). Reject any plane degamma LUT whose size does not match MAX_COLOR_LUT_ENTRIES, mirroring the invariant the code already asserts a few lines below (and which the CRTC path enforces). The AMD_PLANE_DEGAMMA_LUT property is only exposed on builds with AMD_PRIVATE_COLOR defined.

Where it lives

The fix touches these files. If the subsystem is one you do not use, the practical exposure is lower, though the package is still the vulnerable one.

drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c

What this is
AMD DISPLAY COREMAINTAINERS section matched on drivers/gpu/drm/amd/display/ · amd-gfx@lists.freedesktop.org · Supported
Show whether Debian builds this, per release

Not established. This site could not find the build rule for the affected file in the kernel trees Debian ships, so it has no answer about whether Debian compiles this code. Read that as unknown, never as absent.

  • bookworm, trixie, forky, sid, bookworm · linux-6.12?
?
not established - no Makefile entry for the affected file

Where a release above reads "not established", no build rule for the affected file was found in that release's kernel tree. That is a gap in this lookup, not a finding that the code is absent.

From the configuration Debian publishes for every kernel flavour it builds. It covers only the architectures Debian ships a linux-config package for, and nothing about a kernel you built yourself. Debian's own status above stays authoritative about the source package.MAINTAINERS

Signals

Published
2026-09-16 (33 days ago)source
CVSS
7.8 high
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:Hsource recompute it
Attack vector
local (AV:L)source
EPSS
0.16%, higher than 5.2% of all CVEssource
CISA KEV
not listedthe KEV catalogue
Debian urgency
unimportantsource
Subsystem
drivers/gpu

Upstream fixes

The versions the CNA records as introducing and fixing this, and the commit for each. source

IntroducedFixed inCommit
6.86.12.110f6f04d8ae572
6.86.18.510b2615b8b54f
6.87.2.5b10cc09b3292
6.87.3e4c3ab59021e

Debian advisories

AdvisoryDateShipped toDebian
DLA-4817-12026-10-04bookworm 6.12.111-1~deb12u1tracker
DSA-6528-12026-09-29trixie 6.12.111-1tracker

Why the CNA scored it this way

Quoted from the kernel CNA's own scoring file, word for word. A highlighted metric carries the most severe value CVSS v3.1 defines for it, which is what pushes the score up. source

AV:LAttack vector, local
The bug is reached only through local DRM ioctls (DRM_IOCTL_MODE_CREATEPROPBLOB then DRM_IOCTL_MODE_ATOMIC or MODE_OBJ_SETPROPERTY) on /dev/dri/cardN when setting AMD_PLANE_DEGAMMA_LUT, a private plane property on AMDGPU display; no network or remote-peer path exists into amdgpu_dm color management.
AC:LAttack complexity, low
The attacker fully controls the LUT blob size and contents and can deterministically trigger a divide-by-zero with a one-entry blob or a large heap over-read with a short non-linear LUT; no race, memory-layout luck, or victim state is required.
PR:LPrivileges required, low
DRM_IOCTL_MODE_ATOMIC requires DRM master, which is the normal state of the logged-in graphical-session user (compositor, gamescope, kiosk, Steam Deck, Android) or the first opener of an unclaimed card; no CAP_SYS_ADMIN or real root is needed.
UI:NUser interaction, none
The attacker creates the undersized blob and issues the atomic commit from their own process; no other user must open a file, plug in a display, or take any action.
S:UScope, unchanged
The divide-by-zero and out-of-bounds read occur in kernel context on the same host inside the amdgpu display driver; impact stays within the kernel security authority with no VM, IOMMU, or sandbox boundary crossed.
C:HConfidentiality impact, high
__drm_lut_to_dc_gamma() always walks MAX_COLOR_LUT_ENTRIES (4096) drm_color_lut records regardless of blob length, over-reading about 32KB of adjacent kernel heap from a short LUT blob and copying those values into dc_gamma and the display pipeline.
I:HIntegrity impact, high
Kernel heap contents from the over-read are stored into dc_gamma entries and applied by apply_lut_1d() into the plane transfer function that is programmed into DPP degamma hardware, corrupting driver and GPU color-management state with unvalidated memory.
A:HAvailability impact, high
A one-entry LUT causes a divide-error (#DE) panic in __is_lut_linear(); a short non-linear LUT makes __drm_lut_to_dc_gamma() walk tens of kilobytes past the blob into potentially unmapped heap, oopsing the kernel on the atomic check/commit path.