hw/audio/intel-hda: Restrict DMA engine to memories (not MMIO devices)
authorPhilippe Mathieu-Daudé <philmd@redhat.com>
Sat, 18 Dec 2021 16:09:11 +0000 (17:09 +0100)
committerThomas Huth <thuth@redhat.com>
Mon, 21 Mar 2022 09:24:51 +0000 (10:24 +0100)
Issue #542 reports a reentrancy problem when the DMA engine accesses
the HDA controller I/O registers. Fix by restricting the DMA engine
to memories regions (forbidding MMIO devices such the HDA controller).

Reported-by: OSS-Fuzz (Issue 28435)
Reported-by: Alexander Bulekov <alxndr@bu.edu>
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/542
CVE: CVE-2021-3611
Message-Id: <20211218160912.1591633-3-philmd@redhat.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
hw/audio/intel-hda.c

index 47a36acc71c428dd392b5138273fb27dc527d60d..78a47bc08c15825abdf27625b3eab424b48fd7e0 100644 (file)
@@ -345,7 +345,7 @@ static void intel_hda_corb_run(IntelHDAState *d)
 
 static void intel_hda_response(HDACodecDevice *dev, bool solicited, uint32_t response)
 {
-    const MemTxAttrs attrs = MEMTXATTRS_UNSPECIFIED;
+    const MemTxAttrs attrs = { .memory = true };
     HDACodecBus *bus = HDA_BUS(dev->qdev.parent_bus);
     IntelHDAState *d = container_of(bus, IntelHDAState, codecs);
     hwaddr addr;