Look up another CVE · open CVE-2026-89571 in the interactive tracker
CVE-2026-89571
cxl/features: bound fwctl command payload to the input buffer
Published 2026-09-11 (37 days ago) by the Linux kernel CNA. Subsystem drivers/cxl. Debian urgency: unimportant.
What to do, per Debian release
Debian's own status for CVE-2026-89571 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 | not affected | 6.1.190-1 | Nothing to do. bookworm never shipped the vulnerable code. |
| Debian 13trixie | not affected | 6.12.113-1 | Nothing to do. trixie never shipped the vulnerable code. |
| 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
fwctl_cmd_rpc() copies cmd->in_len bytes into inbuf = kvzalloc(cmd->in_len) and passes inbuf and in_len to ->fw_rpc(). The CXL callback cxlctl_fw_rpc() ignores in_len and never checks the user-controlled op_size against it. cxlctl_set_feature() bounds op_size only from below (op_size <= sizeof(feat_in->hdr)) and then reads op_size - sizeof(hdr) bytes from feat_in->feat_data via cxl_set_feature(). With a small in_len and a large op_size the first memcpy() already reads past the kvzalloc(in_len) buffer; the out-of-bounds bytes are placed in the mailbox payload and sent to the device, and a large enough op_size can walk into unmapped memory and oops the kernel. The Get paths pin op_size to a fixed size but likewise read the input struct without checking in_len. Reject, at the single dispatch point, any request whose fixed header plus op_size does not fit in the copied-in buffer. The lower-bound test guards the subtraction and ensures op_size was copied in before it is read.
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/cxl/core/features.c
- What this is
- COMPUTE EXPRESS LINK (CXL)MAINTAINERS section matched on drivers/cxl/ · linux-cxl@vger.kernel.org · Maintained
Check it on the machine
grep -wE 'CONFIG_CXL_BUS|CONFIG_CXL_FEATURES' /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.
Show whether Debian builds this, per release
Debian does not build this code in 2 releases. The build rule could not be established for 2 releases, so nothing is claimed about those.
- bookworm, trixie?
- forky, sidn
- ?
- not established - no Makefile entry for the affected file
- n
- not enabled on any flavour - this release does not build the code
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.
- Build switches
- CONFIG_CXL_BUS, CONFIG_CXL_FEATURES
- 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
- 7.1 high
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:Hsource recompute it - Attack vector
- local (AV:L)source
- EPSS
- 0.16%, higher than 5.3% of all CVEssource
- CISA KEV
- not listedthe KEV catalogue
- Debian urgency
- unimportantsource
- Subsystem
- drivers/cxl
Upstream fixes
The versions the CNA records as introducing and fixing this, and the commit for each. source
| Introduced | Fixed in | Commit |
|---|---|---|
| 6.15 | 6.18.50 | 14d52c15d5d9 |
| 6.15 | 7.2.4 | d8957545fe96 |
| 6.15 | 7.3 | f687394af983 |
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 via local ioctl(FWCTL_RPC) on /dev/fwctl/fwctlN through fwctl_fops_ioctl()->fwctl_cmd_rpc()->cxlctl_fw_rpc(); CXL features/fwctl has no network, adjacent-radio, or physical-bus entry point.
- AC:LAttack complexity, low
- The attacker fully controls fwctl_rpc.in_len and fwctl_rpc_cxl.op_size; a short in_len with a large op_size, or in_len=0, deterministically over-reads the kvzalloc buffer or dereferences ZERO_SIZE_PTR. No race or attacker-uncontrollable layout is required.
- PR:LPrivileges required, low
- GET commands run at FWCTL_RPC_CONFIGURATION with no capability check, and SET_FEATURE for reset-effect features needs only FWCTL_RPC_DEBUG_WRITE (no CAP_SYS_RAWIO). Per CNA fwctl precedent, /dev/fwctl access is routinely granted to management/VMM users without init-namespace root.
- UI:NUser interaction, none
- The attacker opens the fwctl device and issues the RPC ioctl themselves; no victim action such as mounting a filesystem or opening a file is required.
- S:UScope, unchanged
- The heap over-read, mailbox copy, and any oops stay inside the host kernel CXL/fwctl code. This is ordinary same-host kernel impact, not a VM escape, IOMMU bypass, or other changed-scope boundary.
- C:HConfidentiality impact, high
- cxl_set_feature() memcpy()s attacker-chosen op_size bytes from past the kvzalloc(in_len) buffer into the CXL mailbox and to the device; that unbounded kernel-heap over-read is C:H per kernel CNA guidance, and GET_FEATURE can return stored feature data including leaked heap.
- I:NIntegrity impact, none
- The defect is a read-only over-read into a newly allocated mailbox buffer sent to the device; there is no kernel out-of-bounds write, use-after-free, or control-flow hijack primitive.
- A:HAvailability impact, high
- A large op_size walks from the short kvzalloc buffer into unmapped memory and oopses, and in_len=0 makes kvzalloc return ZERO_SIZE_PTR so reading opcode faults; either path panics the kernel and is repeatable at will.