On 21/7/26 08:09, [email protected] wrote:
From: Haotian Jiang <[email protected]>

CVE-2021-3611 (commit 79fa99831d) restricted the DMA engine to memories
by setting attrs.memory=true, but only applied this to intel_hda_response.
Three other DMA engine access points still use MEMTXATTRS_UNSPECIFIED,
allowing a malicious guest to trigger DMA-to-self-MMIO reentry:

   - intel_hda_xfer (line 398): called from the audio timer callback
     (hda_codec_xfer -> bus->xfer), so the MemReentrancyGuard does not
     fire (engaged_in_io is false outside MMIO dispatch). A guest that
     points a BDL entry at the HDA controller's own MMIO BAR can write
     audio samples to device registers, triggering whandler side effects
     such as starting/stopping streams or injecting codec commands via
     CORBWP.
   - intel_hda_parse_bdl (line 478): uses pci_dma_read which hardcodes
     MEMTXATTRS_UNSPECIFIED. A guest-controlled BDL base address can
     point at controller MMIO, allowing the DMA engine to read device
     registers as BDL descriptors.
   - intel_hda_corb_run (line 333): ldl_le_pci_dma reads the CORB ring
     with MEMTXATTRS_UNSPECIFIED, allowing the DMA engine to read
     controller MMIO as CORB entries.

Fix all three by passing {.memory = true} explicitly, matching the
fix already applied to intel_hda_response. For intel_hda_parse_bdl,
replace pci_dma_read with pci_dma_rw to pass the controlled attrs.

Fixes: 79fa99831d ("hw/audio/intel-hda: Restrict DMA engine to memories (not MMIO 
devices)")
Reported-by: Haotian Jiang of Tencent Security (Yunding Lab) 
<[email protected]>
Signed-off-by: Haotian Jiang <[email protected]>
Cc: [email protected]
---
  hw/audio/intel-hda.c | 9 ++++++---
  1 file changed, 6 insertions(+), 3 deletions(-)

Patch queued, thanks.

Reply via email to