Skip to main content
CVE Vulnerability Database
Vulnerability Database/CVE-2026-89821

CVE-2026-89821: Linux Kernel DRM AMD Display DOS Vulnerability

CVE-2026-89821 is a denial of service vulnerability in the Linux kernel AMD display driver caused by divide-by-zero errors in LUT processing. This article covers the technical details, affected versions, and mitigation strategies.

Published:

CVE-2026-89821 Overview

CVE-2026-89821 is a divide-by-zero flaw in the Linux kernel's AMD display driver (drm/amd/display). The defect resides in the __is_lut_linear() function, which validates whether a Look-Up Table (LUT) describes a linear color mapping. The function computes expected = i * MAX_DRM_LUT_VALUE / (size - 1) without checking that size is greater than one. When callers supply a single-entry LUT, the divisor becomes zero and the CPU raises a divide error (#DE) inside kernel context. The upstream fix returns false early when the LUT contains fewer than two entries, because such a table cannot represent a linear mapping.

Critical Impact

A local caller able to reach __is_lut_linear() with a single-entry LUT triggers a kernel-level divide error, producing an oops and denial of service on affected AMD graphics hosts.

Affected Products

  • Linux kernel versions containing the drm/amd/display__is_lut_linear() routine prior to the fixes referenced in the upstream commits
  • Systems using AMD Display Core (DC) kernel graphics driver
  • Distributions shipping vulnerable stable kernel branches until backports land

Discovery Timeline

  • 2026-09-16 - CVE-2026-89821 published to the National Vulnerability Database
  • 2026-09-16 - Last updated in NVD database

Technical Details for CVE-2026-89821

Vulnerability Analysis

The __is_lut_linear() helper in the AMD Display Core driver iterates a color Look-Up Table and checks whether each entry matches the expected linear value. The expected value is calculated with integer division by (size - 1). The routine assumes size >= 2, but nothing in the function guards that invariant. When size == 1, the divisor evaluates to zero and the x86 CPU raises a #DE exception. The kernel handles this exception with a divide error oops, terminating the offending task and potentially destabilizing the graphics subsystem.

This class of defect maps to a kernel-mode denial of service driven by missing input validation on a numeric boundary condition. A LUT with fewer than two entries cannot mathematically describe a linear ramp, so the upstream patch converts the pathological input into an early return false rather than an arithmetic operation.

Root Cause

The root cause is missing boundary validation before performing integer division. The function trusts that the caller-provided LUT size is at least two entries. When a single-entry LUT reaches the calculation, division by (size - 1) becomes division by zero. The corrected code checks the entry count before the loop and rejects LUTs that are too small to describe linearity.

Attack Vector

Exploitation requires the ability to invoke a code path that passes a single-entry LUT to __is_lut_linear(). The reachable callers are within the AMD display pipeline, which is typically driven by Direct Rendering Manager (DRM) ioctls issued by userspace clients holding a DRM master or render node file descriptor. A local unprivileged process with access to /dev/dri/* nodes could construct the malformed LUT to crash the kernel. The impact is denial of service on the affected host; no remote network vector is documented.

The vulnerability is a boundary-condition and denial-of-service defect. Refer to the upstream commits for the exact code diff: Kernel Git Commit 15ee43a, Kernel Git Commit 2320626, Kernel Git Commit 4d5ee09, Kernel Git Commit 4f40873, Kernel Git Commit 5f18cd1, Kernel Git Commit c127ace, Kernel Git Commit d1e06d5, and Kernel Git Commit ee28faf.

Detection Methods for CVE-2026-89821

Indicators of Compromise

  • Kernel oops or panic messages referencing divide error: 0000 with a call trace containing __is_lut_linear or the AMD DC pipeline
  • Unexpected termination of processes issuing DRM ioctls against /dev/dri/card* or render nodes
  • Repeated graphics driver reset events in dmesg correlated with a single local process

Detection Strategies

  • Compare running kernel versions against the fixed commits listed in the upstream references to identify unpatched hosts
  • Ingest dmesg and kern.log into centralized logging and alert on divide error stack traces originating in amdgpu or drm modules
  • Track process ancestry of tasks that trigger DRM ioctls immediately before a divide error oops

Monitoring Recommendations

  • Forward kernel ring buffer and journald records to a centralized log platform for correlation across fleets
  • Enable audit rules on /dev/dri/* device access to attribute crashes to specific users or containers
  • Track kernel crash counters and automatic reboot events on workstations and virtual desktop hosts with AMD GPUs

How to Mitigate CVE-2026-89821

Immediate Actions Required

  • Inventory Linux hosts running AMD GPUs and identify kernels that lack the __is_lut_linear() guard
  • Apply the distribution kernel update that backports the upstream fix as soon as it is available
  • Restrict access to DRM render nodes on multi-tenant systems by limiting membership in the render and video groups

Patch Information

The fix modifies __is_lut_linear() to return false when the LUT contains fewer than two entries, avoiding the division by zero. The patch is present in the upstream commits 15ee43a, 2320626, 4d5ee09, 4f40873, 5f18cd1, c127ace, d1e06d5, and ee28faf. Consume the fix through the distribution kernel package that references the relevant stable branch.

Workarounds

  • Limit local access to DRM device nodes so only trusted users can submit LUT-related ioctls
  • On shared systems, isolate untrusted workloads inside virtual machines or containers that do not expose direct GPU device access
  • Enable kernel crash dumping (kdump) to capture forensic data if the divide error is triggered before patches are deployed

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Default Legacy - Prefooter | Experience the World’s Most Advanced Cybersecurity Platform

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.