Look up another CVE · open CVE-2026-93042 in the interactive tracker
CVE-2026-93042
dmaengine: dw-edma: Terminate all descriptors without callbacks
Published 2026-09-17 (31 days ago) by the Linux kernel CNA. Subsystem drivers/dma. Debian urgency: not yet assigned.
Debian does not build this code. The per-release build detail is under "Where it lives" below.
What to do, per Debian release
Debian's own status for CVE-2026-93042 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 | fixedDSA-6528-1 · 2026-09-29 · text | 6.12.111-1 | Update 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 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. |
| Debian 12bookworm · linux-6.12 | fixedDLA-4817-1 · 2026-10-04 · text | 6.12.111-1~deb12u1 | Update 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
The DMA Engine client documentation says in the "Terminate APIs" section of Documentation/driver-api/dmaengine/client.rst: "No callback functions will be called for any incomplete transfers." dw-edma instead calls vchan_cookie_complete() when a deferred STOP reaches the interrupt handler. This schedules a callback for the active descriptor and leaves other issued or submitted descriptors queued. A late callback after dmaengine_terminate_sync() can dereference client state that has already been freed, while leftover descriptors may later restart into reused buffers or leak. Move all issued and submitted descriptors to the terminated list whenever termination completes. For a pending STOP, do this from both the DONE and ABORT paths. Complete their cookies in order without scheduling callbacks. A STOP can remain pending until the running transfer raises an interrupt. Make device_synchronize() wait for such a pending STOP to complete before releasing terminated descriptors. Reuse it from free_chan_resources(), then release the remaining virt-dma resources. Sleep instead of busy-polling while waiting, and warn if the existing timeout expires.
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/dma/dw-edma/dw-edma-core.c
- What this is
- DESIGNWARE EDMA CORE IP DRIVERMAINTAINERS section matched on drivers/dma/dw-edma/ · dmaengine@vger.kernel.org · Maintained
- Kernel module
- none to look for. The file would have gone into dw_edma, and Debian does not compile it into that module, so finding dw_edma in lsmod would say nothing about this CVE.
Check it on the machine
grep -wE 'CONFIG_DMADEVICES|CONFIG_DW_EDMA' /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 5 releases below, every kernel flavour Debian publishes has the switch off, so the vulnerable file is compiled into no kernel binary Debian ships.
- bookworm, trixie, forky, sid, bookworm · linux-6.12n
- n
- not enabled on any flavour - this release does not build the code
- Build switches
- CONFIG_DMADEVICES, CONFIG_DW_EDMA
- 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-17 (31 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.40%, higher than 32.5% of all CVEssource
- CISA KEV
- not listedthe KEV catalogue
- Debian urgency
- not yet assignedsource
- Subsystem
- drivers/dma
Upstream fixes
The versions the CNA records as introducing and fixing this, and the commit for each. source
| Introduced | Fixed in | Commit |
|---|---|---|
| 5.3 | 6.6.157 | 65e387b95d38 |
| 5.3 | 6.12.110 | 4793f9099a1c |
| 5.3 | 6.18.52 | be87d86537de |
| 5.3 | 7.2.6 | f3ec6702a1d2 |
| 5.3 | 7.3 | 99109a51efd2 |
Debian advisories
| Advisory | Date | Shipped to | Debian |
|---|---|---|---|
| DLA-4817-1 | 2026-10-04 | bookworm 6.12.111-1~deb12u1 | tracker |
| DSA-6528-1 | 2026-09-29 | trixie 6.12.111-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:AAttack vector, adjacent network
- On DesignWare PCIe endpoint SoCs the host starts eDMA via pci_epf_mhi_edma_read()/write() (MHI transfers ≥4K), nvmet_pci_epf_dma_transfer(), or pci_epf_test BAR COMMAND_READ|WRITE with FLAG_USE_DMA, then those clients call dmaengine_terminate_sync() on the local dw-edma channel; the trigger is PCIe-link peer traffic, not a local syscall or a routable protocol.
- AC:LAttack complexity, low
- pci_epf_mhi_edma_read() waits only 1000ms then calls dmaengine_terminate_sync(); a host that issues a ≥4K MHI DMA and stalls it hits that timeout while EDMA_ST_BUSY. Vulnerable dw_edma_device_terminate_all() only stores EDMA_REQ_STOP and returns 0 because device_synchronize was unimplemented, so the host can drop the stall and deliver the DONE/ABORT IRQ itself.
- PR:NPrivileges required, none
- pci_epf_mhi_edma_read()/write() and nvmet_pci_epf_dma_transfer() do not authenticate the PCIe host; MHI TREs, NVMe I/O, or BAR command-register COMMAND_READ/WRITE writes from the upstream port suffice, with no Linux uid, capability, or user-namespace check on the endpoint.
- UI:NUser interaction, none
- The PCIe host starts the MHI/NVMe/epf-test DMA and forces the client's terminate-on-timeout path itself; no victim mount, file open, or other interactive step is required once the endpoint function is already bound.
- S:UScope, unchanged
- The late vchan_complete() callback UAF and leftover desc_issued restarts corrupt callback state and DMA buffers inside the same endpoint kernel that hosts dw-edma; that is in-kernel memory corruption, not a KVM/Xen guest escape or an IOMMU policy bypass.
- C:HConfidentiality impact, high
- dw_edma_done_interrupt()'s EDMA_REQ_STOP path calls vchan_cookie_complete(), so vchan_complete() can invoke pci_epf_mhi_dma_callback() after pci_epf_mhi_edma_read() returned and its DECLARE_COMPLETION_ONSTACK died; leftover issued descriptors can also dw_edma_start_transfer() MEM_TO_DEV from reused kernel pages into host memory.
- I:HIntegrity impact, high
- After dma_unmap_single() in the MHI/nvmet timeout path, leftover desc_issued entries stay queued, so a later issue_pending() runs dw_edma_start_transfer() DEV_TO_MEM into those unmapped/reused pages, and the late callback UAF likewise corrupts kernel state, giving a write primitive.
- A:HAvailability impact, high
- The STOP-path vchan_cookie_complete() UAF in vchan_complete() and DMA into buffers already unmapped by pci_epf_mhi_edma_read() or nvmet_pci_epf_dma_transfer() oops or panic the endpoint kernel, as the fix commit describes for a late callback after dmaengine_terminate_sync().