dmaengine: mmp_pdma: Fix race condition in mmp_pdma_residue()
- Published
- Last modified
- Where the record stands: published, rejected by its publisher, or superseded by another id.What do these mean? →
- published
- Whether CISA lists it in its Known Exploited Vulnerabilities catalog: proof that attackers are using it.What do these mean? →
- Not listed in CISA KEV
- Fix
- Fixed in 5.15.209, 6.1.167, 6.6.130, 6.12.78, 6.18.10
- Whether working attack code is public (Exploit-DB, Metasploit, Nuclei or GitHub). Public code makes attacks easier.What do these mean? →
- None on Exploit-DB, Metasploit or GitHub
Summary
In the Linux kernel, the following vulnerability has been resolved: dmaengine: mmp_pdma: Fix race condition in mmp_pdma_residue() Add proper locking in mmp_pdma_residue() to prevent use-after-free when accessing descriptor list and descriptor contents. The race occurs when multiple threads call tx_status() while the tasklet on another CPU is freeing completed descriptors: CPU 0 CPU 1 ----- ----- mmp_pdma_tx_status() mmp_pdma_residue() -> NO LOCK held list_for_each_entry(sw, ..) DMA interrupt dma_do_tasklet() -> spin_lock(&desc_lock) list_move(sw->node, ...) spin_unlock(&desc_lock) | dma_pool_free(sw) <- FREED! -> access sw->desc <- UAF! This issue can be reproduced when running dmatest on the same channel with multiple threads (threads_per_chan > 1). Fix by protecting the chain_running list iteration and descriptor access with the chan->desc_lock spinlock.
Timeline
- CVE published
- Record last updated
Affected versions
- Linux Linux
From 1b38da264674d6a0fe26a63996b8f88b88c3da48 · fixed in 3f0e0e2d9e752570041e95fd04635e2580097819; From 1b38da264674d6a0fe26a63996b8f88b88c3da48 · fixed in dfb5e05227745de43b7fd589721817a4337c970d; From 1b38da264674d6a0fe26a63996b8f88b88c3da48 · fixed in eba0c75670c022cb1f948600db972524bcfe8166; From 1b38da264674d6a0fe26a63996b8f88b88c3da48 · fixed in fc023b8fab057f0c910856ff36d3e12a30b7af4a; From 1b38da264674d6a0fe26a63996b8f88b88c3da48 · fixed in 9f665b3c3d9a168410251f27a5d019b7bf93185c; From 1b38da264674d6a0fe26a63996b8f88b88c3da48 · fixed in a143545855bc2c6e1330f6f57ae375ac44af00a7
- Linux Linux
3.16
- KernelLinux
From 3.16.0 · fixed in 5.15.209; From 5.16.0 · fixed in 6.1.167; From 6.2.0 · fixed in 6.6.130; From 6.7.0 · fixed in 6.12.78; From 6.13.0 · fixed in 6.18.10