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

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

CVE-2026-68273

drm/amdgpu: Fix context pstate override handling

7.8 EPSS 0.1% AV:L

Published 2026-08-10 (2 months 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-68273 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 12bookwormvulnerable6.1.190-1No 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 13trixiefixedDSA-6466-1 · 2026-08-25 · text6.12.105-1Update the kernel and reboot. DSA-6466-1 shipped the fix on 2026-08-25, in 6.12.105-1. A running kernel keeps the old code until the machine restarts.
Debian 14forkyfixed7.1.6-1Update the kernel and reboot. Fixed in 7.1.6-1. A running kernel keeps the old code until the machine restarts.
Debian unstablesidfixed7.1.6-1Update the kernel and reboot. Fixed in 7.1.6-1. A running kernel keeps the old code until the machine restarts.
Debian 12bookworm · linux-6.12fixedDLA-4788-1 · 2026-09-19 · text6.12.107-1~deb12u1Update the kernel and reboot. DLA-4788-1 shipped the fix on 2026-09-19, in 6.12.107-1~deb12u1. A running kernel keeps the old code until the machine restarts.

The vulnerability

What the bug is

There are several problems in the context pstate handling code. The most serious ones are potential use-after-free and NULL pointer dereferences at context initialization time. Both are due amdgpu_ctx_init() not holding the adev->pm.stable_pstate_ctx_lock, which is otherwise used from both sysfs and the context code itself for modifying and clearing the stored context pointer. Second issue is that context fini can trample over the pstate configuration set via sysfs. This is due the restore state (ctx->stable_pstate) being saved at context init time, and not if, or when the context actually changes the pstate. As the context exits it will therefore incorrectly restore to what was set before the sysfs override was requested. The simplest fix is to drastically simplify how the state is tracked, by clearly defining the points at which pstate ownership is taken and released, and to handle all transitions under the correct lock. Instead of at context init time, the previous state is saved only at the point the context overrides the current state, and is restored on context exit only if the context is still the owner of the current override state. (cherry picked from commit 1b5e413713c0a93bc1818394d0ce49aaad21bd27)

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/amdgpu/amdgpu_ctx.c

What this is
RADEON and AMDGPU DRM DRIVERSMAINTAINERS section matched on drivers/gpu/drm/amd/ · amd-gfx@lists.freedesktop.org · Supported
Kernel module
amdgpu

Check it on the machine

grep -w CONFIG_DRM_AMDGPU /boot/config-$(uname -r)

Reads the booted kernel's own configuration, on the machine and nowhere else. =y is built in, =m is a module, and an is not set line means the code is not there.

lsmod | grep -w amdgpu

Prints a line if that module is loaded right now, and nothing if it is not. One that is not loaded can still be loaded later by anything that needs it.

Show whether Debian builds this, per release

Debian builds this, but not on every flavour. At least one release below builds the code on some of its kernel flavours and not on others, so the answer depends on the architecture and flavour installed.

  • bookwormMnot built on amd64/cloud-amd64, arm64/cloud-arm64, armhf/armmp, armhf/armmp-lpae, armhf/rt/armmp
  • trixieMnot built on amd64/cloud-amd64, arm64/cloud-arm64, armel/rpi, armhf/armmp, armhf/armmp-lpae, armhf/rt/armmp, s390x/s390x
  • forky, sidMnot built on amd64/cloud-amd64, arm64/cloud-arm64, s390x/s390x
  • bookworm · linux-6.12Mnot built on amd64/cloud-amd64, arm64/cloud-arm64, armhf/armmp, armhf/armmp-lpae, armhf/rt/armmp
M
a module where it is built at all; some flavours do not build it
Build switch
CONFIG_DRM_AMDGPU

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 kbuild Makefiles Debian linux-config packages

Signals

Published
2026-08-10 (2 months 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.13%, higher than 2.6% 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

IntroducedFixed inCommit
6.16.12.10323a8726e1d75
6.16.18.44e06c39cc1c48
6.17.1.69f9c88eb298c
6.17.2c1dc4ccb82c9
6.0.700

Debian advisories

AdvisoryDateShipped toDebian
DLA-4788-12026-09-19bookworm 6.12.107-1~deb12u1tracker
DSA-6466-12026-08-25trixie 6.12.105-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 the DRM_IOCTL_AMDGPU_CTX ioctl on a local /dev/dri/renderD* or card* node (registered DRM_AUTH|DRM_RENDER_ALLOW in amdgpu_drv.c:3063), and the racing writer is the local sysfs power_dpm_force_performance_level path. No network or adjacent-network path reaches amdgpu context pstate handling.
AC:LAttack complexity, low
The attacker owns both sides of the race — one thread loops AMDGPU_CTX_OP_SET_STABLE_PSTATE and context free while another loops AMDGPU_CTX_OP_ALLOC_CTX — and can retry indefinitely. The dangling-pointer variant (fini re-assigning adev->pm.stable_pstate_ctx = ctx just before kfree) needs no race at all: once latched, every later context creation dereferences freed memory deterministically.
PR:LPrivileges required, low
No capability or authorization check exists anywhere on the path (amdgpu_ctx_ioctl -> amdgpu_ctx_alloc/amdgpu_ctx_stable_pstate -> amdgpu_ctx_init); an unprivileged local user only needs an open render node fd, which is routinely granted to desktop users in the render/video group, to containers, sandboxed GPU processes, and to ordinary apps on Android/Chrome OS.
UI:NUser interaction, none
The attacker triggers everything with its own ioctls on its own file descriptors and its own threads; no action by another user or administrator is required, and the crash or freed-object read happens synchronously in the attacker's own syscall.
S:UScope, unchanged
The corrupted state (adev->pm.stable_pstate_ctx and the freed struct amdgpu_ctx) and all consequences stay within the kernel of the machine running the amdgpu driver; no VM, IOMMU, or sandbox security boundary is crossed.
C:HConfidentiality impact, high
amdgpu_ctx_init() dereferences a stale adev->pm.stable_pstate_ctx pointer after the context has been kfree()d, reading a field out of a freed kmalloc object that the attacker can reclaim and control via heap spraying; per kernel scoring guidance a use-after-free is treated as High since freed-object access can be leveraged toward kernel memory disclosure.
I:HIntegrity impact, high
The unlocked read/write of the global pstate-owner pointer leaves a dangling kernel pointer in adev->pm.stable_pstate_ctx and lets a freed, attacker-reclaimable object drive amdgpu_dpm_force_performance_level(); the commit also documents context teardown trampling the DPM configuration set through root-only sysfs, so an unprivileged user corrupts privileged device state.
A:HAvailability impact, high
The unlocked check-then-use of adev->pm.stable_pstate_ctx yields a NULL pointer dereference when a concurrent fini or sysfs write clears it, and the stale-pointer case faults on freed or unmapped slab memory — either produces a kernel oops and a wedged GPU, repeatable at will by an unprivileged local user.