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

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

CVE-2026-89725

media: cec: stm32: prevent out-of-bounds write on RX overflow

8.8 EPSS 0.3% AV:A

Published 2026-09-11 (37 days ago) by the Linux kernel CNA. Subsystem drivers/media. Debian urgency: not yet assigned.

What to do, per Debian release

Debian's own status for CVE-2026-89725 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 12bookwormfixedDLA-4841-1 · 2026-10-17 · text6.1.190-1Update the kernel and reboot. DLA-4841-1 shipped the fix on 2026-10-17, in 6.1.190-1. A running kernel keeps the old code until the machine restarts.
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

stm32_rx_done() appends each received CEC byte to rx_msg.msg[] using rx_msg.len as the write index, incrementing it on every RXBR (receive-byte-ready) interrupt without checking it against the buffer size: cec->rx_msg.msg[cec->rx_msg.len++] = val & 0xFF; rx_msg.msg[] is a fixed CEC_MAX_MSG_SIZE (16) byte array in struct cec_msg, and rx_msg.len is only reset on RXACKE/RXOVR or after a completed message (RXEND). The number of bytes received before RXEND is decided by the remote CEC device (it sets EOM), not by the driver. A peer that keeps sending bytes without ending the message drives RXBR repeatedly, pushing rx_msg.len past 16 and writing peer-controlled bytes out of bounds into the surrounding memory. This is reachable in normal operation once the driver has probed and receiving is enabled, from the IRQ thread, without any local privilege. The length check in the CEC core runs on the consumer side, after the byte has been stored, so it does not prevent the overflow. Bound the index in the driver before the store, as the other platform CEC drivers already do (e.g. tegra_cec), dropping the excess bytes of an overlong frame. Found by static analysis tool CodeQL.

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/media/cec/platform/stm32/stm32-cec.c

What this is
CEC FRAMEWORKMAINTAINERS section matched on drivers/media/cec/ · linux-media@vger.kernel.org · Supported
Kernel module
stm32_cec

Check it on the machine

grep -wE 'CONFIG_CEC_CORE|CONFIG_CEC_STM32' /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 stm32_cec

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/amd64, amd64/cloud-amd64, amd64/rt/amd64, arm64/arm64, arm64/cloud-arm64, arm64/rt/arm64, i386/686, i386/686-pae, i386/rt/686-pae, ppc64el/powerpc64le
  • trixieMnot built on amd64/amd64, amd64/cloud-amd64, amd64/rt/amd64, arm64/arm64, arm64/arm64-16k, arm64/cloud-arm64, arm64/rt/arm64, armel/rpi, ppc64el/powerpc64le, ppc64el/powerpc64le-64k, riscv64/riscv64, s390x/s390x
  • forky, sidMnot built on amd64/amd64, amd64/cloud-amd64, amd64/rt-amd64, arm64/arm64, arm64/arm64-16k, arm64/cloud-arm64, arm64/rt-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/arm64, arm64/arm64-16k, arm64/cloud-arm64, arm64/rt/arm64, ppc64el/powerpc64le, ppc64el/powerpc64le-64k
M
a module where it is built at all; some flavours do not build it
Build switches
CONFIG_CEC_CORE, CONFIG_CEC_STM32
Reads as
all on means the file is compiled; any one off means it is not.

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-09-11 (37 days ago)source
CVSS
8.8 high
CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:Hsource recompute it
Attack vector
adjacent network (AV:A)source
EPSS
0.26%, higher than 16.8% of all CVEssource
CISA KEV
not listedthe KEV catalogue
Debian urgency
not yet assignedsource
Subsystem
drivers/media

Upstream fixes

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

IntroducedFixed inCommit
4.135.10.270f2499b720ea9
4.135.15.2213df1a4026662
4.136.1.18837ac45f7d6e3
4.136.6.1571b4fdefd788d
4.136.12.109c3edd7fb8e36
4.136.18.500c260d3f97e5
4.137.2.4a85ce3b17561
4.137.3fb9dda38d4b9

Debian advisories

AdvisoryDateShipped toDebian
DLA-4841-12026-10-17bookworm 6.1.190-1tracker
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:AAttack vector, adjacent network
The overflow is in the STM32 HDMI-CEC RX IRQ path (stm32_cec_irq_handler to stm32_cec_irq_thread to stm32_rx_done), driven by bytes a peer places on the shared CEC line. HDMI-CEC is a multi-drop bus among TVs, AVRs, streaming sticks, and conference or automotive HDMI sources, matching CAN/Bluetooth adjacent-segment scoring rather than Internet-routable Network.
AC:LAttack complexity, low
A CEC peer fully controls each payload byte and the EOM bit that ends the frame. STM32 hardware raises RXBR per received byte with no 16-byte cap, so withholding EOM at normal CEC bit timing deterministically writes past rx_msg.msg[16] with no race or attacker-uncontrollable layout.
PR:NPrivileges required, none
HDMI-CEC has no authentication. Any device on the same CEC bus can emit an overlong frame that the IRQ thread copies into kernel memory; the attacker needs no Linux account, capability, or user-namespace privilege on the STM32 host.
UI:NUser interaction, none
Once the adapter is enabled, which is normal for STM32MP1/STM32F7 HDMI products that claim a CEC logical address at boot, RX interrupts run autonomously. No victim file-open, mount, or prompt is required during the attack.
S:UScope, unchanged
The out-of-bounds write corrupts the kmalloc'd struct stm32_cec and adjacent kernel heap on the same host OS. It does not cross a VM, IOMMU, or other separate security authority.
C:HConfidentiality impact, high
Attacker-controlled bytes are written past the 16-byte rx_msg.msg[] into the rest of the heap object and neighboring slabs. That kernel memory corruption can be leveraged for information disclosure, so Confidentiality is High.
I:HIntegrity impact, high
This is an unbounded out-of-bounds write of peer-controlled CEC bytes into kernel heap (rx_msg trailing fields, tx_msg, tx_cnt, then adjacent objects), which is an integrity compromise exploitable for arbitrary write or control-flow hijack.
A:HAvailability impact, high
Overflowing the CEC RX buffer corrupts kernel heap and slab metadata, causing oops or panic even when not fully exploited for code execution. Heap corruption is scored High availability.