Look up another CVE · open CVE-2026-93176 in the interactive tracker
CVE-2026-93176
drm/amd/display: Fix dangling pointer in plane reset function
Published 2026-09-17 (31 days ago) by the Linux kernel CNA. Subsystem drivers/gpu. Debian urgency: not yet assigned.
What to do, per Debian release
Debian's own status for CVE-2026-93176 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
| Release | Status | Version | What this means |
|---|---|---|---|
| Debian 12bookworm | vulnerable | 6.1.190-1 | No fix published anywhere yet, neither in Debian nor upstream for the series bookworm tracks. Watch the Debian tracker page for this CVE. Advisories for bookworm have historically landed a median of 23 days after publication. |
| Debian 13trixie | vulnerable | 6.12.113-1 | No fix published anywhere yet, neither in Debian nor upstream for the series trixie tracks. Watch the Debian tracker page for this CVE. Advisories for trixie have historically landed a median of 11 days after publication. |
| Debian 14forky | fixed | 7.2.6-1 | Update the kernel and reboot. Fixed in 7.2.6-1. A running kernel keeps the old code until the machine restarts. |
| Debian unstablesid | fixed | 7.2.6-1 | Update the kernel and reboot. Fixed in 7.2.6-1. A running kernel keeps the old code until the machine restarts. |
The vulnerability
What the bug is
amdgpu_dm_plane_drm_plane_reset() frees the old state before allocating a new one. If kzalloc() fails, the function returns without updating the state pointer, leaving a dangling pointer to already freed memory. Fix this by allocating the new state first. On allocation failure, the old state remains untouched and the function safely returns. Found by Linux Verification Center (linuxtesting.org) with SVACE. [adjust for movement around current amd-staging-drm-next]
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_plane.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?
- ?
- 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-17 (31 days ago)source
- CVSS
- 7.0 high
CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:Hsource recompute it - Attack vector
- local (AV:L)source
- EPSS
- 0.15%, higher than 4.0% of all CVEssource
- CISA KEV
- not listedthe KEV catalogue
- Debian urgency
- not yet assignedsource
- Subsystem
- drivers/gpu
Upstream fixes
The versions the CNA records as introducing and fixing this, and the commit for each. source
| Introduced | Fixed in | Commit |
|---|---|---|
| 6.0 | 6.18.57 | 3d8391d3149a |
| 6.0 | 7.2.6 | 80c0f51aced4 |
| 6.0 | 7.3 | 98cad4bd1443 |
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 UAF is in amdgpu_dm_plane_drm_plane_reset() after plane->state is already live, reached from drm_mode_config_reset() in drm_atomic_helper_resume() via dm_destroy_cached_state() in dm_resume(). Callers are local: amdgpu_pmops_resume (S3/S0ix) and amdgpu_drm_ioctl then pm_runtime_get_sync then amdgpu_pmops_runtime_resume. No network protocol message is involved.
- AC:HAttack complexity, high
- The dangling plane->state exists only when kzalloc of struct dm_plane_state fails after amdgpu_dm_plane_drm_plane_destroy_state() has already kfree'd the previous state. That GFP_KERNEL miss during dm_resume()/drm_mode_config_reset() is not reliably attacker-controlled.
- PR:LPrivileges required, low
- amdgpu_drm_ioctl() issues pm_runtime_get_sync() with no capable() check, so any local user who can open /dev/dri/renderD* or card* (typical video/render-group access) can runtime-resume into dm_resume() and drm_mode_config_reset(). This is not init-namespace root.
- UI:NUser interaction, none
- The attacker opens the DRM node and issues their own ioctl to drive amdgpu_pmops_runtime_resume() into dm_resume(), or initiates their own session suspend/resume; no separate victim must mount media, attach a display, or accept a prompt.
- S:UScope, unchanged
- The freed object is the host-kernel struct dm_plane_state stored in drm_plane.state by amdgpu_dm; the UAF stays in the same kernel security authority and is not a KVM/Xen, IOMMU, or sandbox escape.
- C:HConfidentiality impact, high
- After the kfree, drm_atomic_helper_commit_duplicated_state() stores the dangling plane->state as old_state and amdgpu_dm_plane_drm_plane_duplicate_state() uses to_dm_plane_state(plane->state) to read dc_state and degamma/ctm/lut blobs from the freed heap object.
- I:HIntegrity impact, high
- drm_atomic_helper_swap_state() later calls atomic_destroy_state() on that already-freed plane->state (double-free), and duplicate_state copies reclaimed dc_state/fb pointers into the new live dm_plane_state, enabling a kernel write and control-flow hijack.
- A:HAvailability impact, high
- drm_atomic_helper_resume() uses the freed plane->state immediately in drm_atomic_helper_commit_duplicated_state(), and DRM_IOCTL_MODE_GETPLANE loads plane->state->crtc/fb; either path oopses or panics the host.