Look up another CVE · open CVE-2026-74453 in the interactive tracker
CVE-2026-74453
drm/vc4: Zero the tile state data array before each BIN job
Published 2026-08-15 (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-74453 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 | fixedDLA-4777-1 · 2026-09-08 · text | 6.1.187-1 | Update the kernel and reboot. DLA-4777-1 shipped the fix on 2026-09-08, in 6.1.187-1. A running kernel keeps the old code until the machine restarts. |
| Debian 13trixie | fixedDSA-6466-1 · 2026-08-25 · text | 6.12.105-1 | Update 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 14forky | fixed | 7.1.8-1 | Update the kernel and reboot. Fixed in 7.1.8-1. A running kernel keeps the old code until the machine restarts. |
| Debian unstablesid | fixed | 7.1.8-1 | Update the kernel and reboot. Fixed in 7.1.8-1. A running kernel keeps the old code until the machine restarts. |
| Debian 12bookworm · linux-6.12 | fixedDLA-4788-1 · 2026-09-19 · text | 6.12.107-1~deb12u1 | Update 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
The binner BO is a single 16MB buffer split into 512KB slots that are handed out to jobs at submission time and recycled as jobs complete, without ever being cleared. Each slot holds the job's Tile State Data Array (TSDA) at its start, followed by the tile allocation pool. While the tile allocation pool is only walked by the render thread through branches the binner generated during the current job, the TSDA is the PTB's own per-tile bookkeeping and is consumed by the hardware itself. Although the kernel sets the "Auto-initialise Tile State Data Array" flag in the tile binning mode configuration, the PTB demonstrably still acts on stale tile state left by the slot's previous user: the binner ends up creating invalid command streams with invalid primitive streams and branches, which can cause GPU hangs as observed in [1][2]. Zero the TSDA when the job's binning slot is configured. This clears 48 bytes per tile (~24KB for a 1080p frame) in the submission path, and guarantees the PTB never sees another job's tile state. The tile count is only checked for being non-zero today, so the 8-bit fields it comes from can describe a tile state array almost six times larger than the slot it has to live in. Bound it before the slot is handed out, since such size decides how much of the slot is left for the tile alloc pool.
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/vc4/vc4_validate.c
- What this is
- DRM DRIVERS FOR VC4MAINTAINERS section matched on drivers/gpu/drm/vc4/ · Supported
- Kernel module
- vc4
Check it on the machine
grep -w CONFIG_DRM_VC4 /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 vc4Prints 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/amd64, amd64/cloud-amd64, amd64/rt/amd64, arm64/cloud-arm64, i386/686, i386/686-pae, i386/rt/686-pae, ppc64el/powerpc64le
- trixieMnot built on amd64/amd64, amd64/cloud-amd64, amd64/rt/amd64, arm64/cloud-arm64, ppc64el/powerpc64le, ppc64el/powerpc64le-64k, riscv64/riscv64, s390x/s390x
- forky, sidMnot built on amd64/amd64, amd64/cloud-amd64, amd64/rt-amd64, arm64/cloud-arm64, loong64/loong64, ppc64el/powerpc64le, ppc64el/powerpc64le-64k, riscv64/riscv64, s390x/s390x
- bookworm · linux-6.12Mnot built on amd64/amd64, amd64/cloud-amd64, amd64/rt/amd64, arm64/cloud-arm64, ppc64el/powerpc64le, ppc64el/powerpc64le-64k
- M
- a module where it is built at all; some flavours do not build it
- Build switch
- CONFIG_DRM_VC4
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-15 (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.3% 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 |
|---|---|---|
| 4.13 | 5.10.265 | c5d8e8e1a8e3 |
| 4.13 | 5.15.216 | d3677372e027 |
| 4.13 | 6.1.183 | c8dea7e7c609 |
| 4.13 | 6.6.151 | f5802be65535 |
| 4.13 | 6.12.103 | 0e858422df23 |
| 4.13 | 6.18.44 | 57667eb7548f |
| 4.13 | 7.1.8 | a75c8f365e20 |
| 4.13 | 7.2 | 48a570c964d8 |
Debian advisories
| Advisory | Date | Shipped to | Debian |
|---|---|---|---|
| DLA-4788-1 | 2026-09-19 | bookworm 6.12.107-1~deb12u1 | tracker |
| DLA-4777-1 | 2026-09-08 | bookworm 6.1.187-1 | tracker |
| DSA-6466-1 | 2026-08-25 | trixie 6.12.105-1 | tracker |
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 flaw is reached in validate_tile_binning_config() while validating a user bin command list during DRM_IOCTL_VC4_SUBMIT_CL on the VC4 DRM render node (/dev/dri/renderD*), a local ioctl path rather than any network-facing protocol.
- AC:LAttack complexity, low
- An attacker with render-node access controls TILE_BINNING_MODE_CONFIG tile dimensions and can submit concurrent or back-to-back bin jobs to obtain recycled 512KB binner slots carrying stale TSDA; no uncontrollable races or rare kernel config are required.
- PR:LPrivileges required, low
- VC4_SUBMIT_CL is registered with DRM_RENDER_ALLOW only (no DRM_AUTH) and vc4_open() performs no capability checks; unprivileged users in the render/video group on Raspberry Pi and other VC4 deployments routinely open /dev/dri/renderD*.
- UI:NUser interaction, none
- No victim interaction is needed when a local attacker with render-node access crafts and submits a malicious bin command list via DRM_IOCTL_VC4_SUBMIT_CL to trigger recycled-slot stale tile state or oversized tile counts.
- S:UScope, unchanged
- Impact is stale-state and GPU PTB misbehavior corrupting shared CMA binner memory for local privilege escalation; it does not cross VM, hypervisor, or IOMMU boundaries and remains within the kernel security authority.
- C:HConfidentiality impact, high
- Recycled 512KB slots retain prior jobs' 48-byte-per-tile TSDA in the shared 16MB CMA binner BO (cross-process GPU address/metadata leak); missing tile-count bounds let the PTB consume up to ~3MB TSDA spanning multiple slots and stale pointers misdirect PTB reads.
- I:HIntegrity impact, high
- Stale TSDA drives the PTB to build invalid primitive streams and branches with out-of-slot GPU DMA across the shared binner BO; unbounded 8-bit tile counts also make tile_alloc_size wrap to ~4GB while tile_alloc_offset points past the 512KB slot, enabling arbitrary CMA corruption.
- A:HAvailability impact, high
- The fix commit and linked Raspberry Pi issues document GPU hangs, repeated "[drm] Resetting GPU", permanently wedged GPUs after invalid bin streams, display corruption, and full system lockups requiring power-cycle or reboot.