* [PULL 0/8] Fix CVE-2021-3611 and heap overflow in sdhci code
@ 2022-03-21 17:03 Thomas Huth
2022-03-21 17:03 ` [PULL 1/8] softmmu/physmem: Simplify flatview_write and address_space_access_valid Thomas Huth
` (8 more replies)
0 siblings, 9 replies; 10+ messages in thread
From: Thomas Huth @ 2022-03-21 17:03 UTC (permalink / raw)
To: qemu-devel, Peter Maydell
Cc: qemu-block, Bin Meng, Philippe Mathieu-Daudé,
Alexander Bulekov, Gerd Hoffmann, Stefan Hajnoczi, Paolo Bonzini
The following changes since commit 2058fdbe81e2985c226a026851dd26b146d3395c:
Merge tag 'fixes-20220318-pull-request' of git://git.kraxel.org/qemu into staging (2022-03-19 11:28:54 +0000)
are available in the Git repository at:
https://gitlab.com/thuth/qemu.git tags/pull-request-2022-03-21
for you to fetch changes up to 27801168ecbb34b987d2e92a12369367bf9ac2bf:
tests/qtest/fuzz-sdcard-test: Add reproducer for OSS-Fuzz (Issue 29225) (2022-03-21 14:05:42 +0100)
----------------------------------------------------------------
* Fix stack-overflow due to recursive DMA in intel-hda (CVE-2021-3611)
* Fix heap overflow due to recursive DMA in sdhci code
----------------------------------------------------------------
As far as I can see, these patches were ready to go, just felt
through the cracks so far since Philippe is now doing other stuff...
I think it would be nice to get these fixed for 7.0 (and if there
is ever a thorough global DMA reentrancy fix later in >= 7.1, we
can still revert the device-specific fixes here again later).
Philippe Mathieu-Daudé (8):
softmmu/physmem: Simplify flatview_write and address_space_access_valid
softmmu/physmem: Introduce MemTxAttrs::memory field and MEMTX_ACCESS_ERROR
hw/audio/intel-hda: Do not ignore DMA overrun errors
hw/audio/intel-hda: Restrict DMA engine to memories (not MMIO devices)
tests/qtest/intel-hda-test: Add reproducer for issue #542
hw/sd/sdhci: Honor failed DMA transactions
hw/sd/sdhci: Prohibit DMA accesses to devices
tests/qtest/fuzz-sdcard-test: Add reproducer for OSS-Fuzz (Issue 29225)
include/exec/memattrs.h | 9 +++++
hw/audio/intel-hda.c | 11 ++++--
hw/sd/sdhci.c | 35 ++++++++++++++-----
softmmu/physmem.c | 55 ++++++++++++++++++++++++------
tests/qtest/fuzz-sdcard-test.c | 76 ++++++++++++++++++++++++++++++++++++++++++
tests/qtest/intel-hda-test.c | 34 +++++++++++++++++++
6 files changed, 198 insertions(+), 22 deletions(-)
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PULL 1/8] softmmu/physmem: Simplify flatview_write and address_space_access_valid
2022-03-21 17:03 [PULL 0/8] Fix CVE-2021-3611 and heap overflow in sdhci code Thomas Huth
@ 2022-03-21 17:03 ` Thomas Huth
2022-03-21 17:03 ` [PULL 2/8] softmmu/physmem: Introduce MemTxAttrs::memory field and MEMTX_ACCESS_ERROR Thomas Huth
` (7 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: Thomas Huth @ 2022-03-21 17:03 UTC (permalink / raw)
To: qemu-devel, Peter Maydell
Cc: qemu-block, Bin Meng, Philippe Mathieu-Daudé,
Alexander Bulekov, Gerd Hoffmann, Stefan Hajnoczi, Paolo Bonzini
From: Philippe Mathieu-Daudé <philmd@redhat.com>
Remove unuseful local 'result' variables.
Reviewed-by: Peter Xu <peterx@redhat.com>
Reviewed-by: David Hildenbrand <david@redhat.com>
Reviewed-by: Alexander Bulekov <alxndr@bu.edu>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Message-Id: <20211215182421.418374-3-philmd@redhat.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
softmmu/physmem.c | 11 +++--------
1 file changed, 3 insertions(+), 8 deletions(-)
diff --git a/softmmu/physmem.c b/softmmu/physmem.c
index 43ae70fbe2..3d968ca92f 100644
--- a/softmmu/physmem.c
+++ b/softmmu/physmem.c
@@ -2816,14 +2816,11 @@ static MemTxResult flatview_write(FlatView *fv, hwaddr addr, MemTxAttrs attrs,
hwaddr l;
hwaddr addr1;
MemoryRegion *mr;
- MemTxResult result = MEMTX_OK;
l = len;
mr = flatview_translate(fv, addr, &addr1, &l, true, attrs);
- result = flatview_write_continue(fv, addr, attrs, buf, len,
- addr1, l, mr);
-
- return result;
+ return flatview_write_continue(fv, addr, attrs, buf, len,
+ addr1, l, mr);
}
/* Called within RCU critical section. */
@@ -3139,12 +3136,10 @@ bool address_space_access_valid(AddressSpace *as, hwaddr addr,
MemTxAttrs attrs)
{
FlatView *fv;
- bool result;
RCU_READ_LOCK_GUARD();
fv = address_space_to_flatview(as);
- result = flatview_access_valid(fv, addr, len, is_write, attrs);
- return result;
+ return flatview_access_valid(fv, addr, len, is_write, attrs);
}
static hwaddr
--
2.27.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PULL 2/8] softmmu/physmem: Introduce MemTxAttrs::memory field and MEMTX_ACCESS_ERROR
2022-03-21 17:03 [PULL 0/8] Fix CVE-2021-3611 and heap overflow in sdhci code Thomas Huth
2022-03-21 17:03 ` [PULL 1/8] softmmu/physmem: Simplify flatview_write and address_space_access_valid Thomas Huth
@ 2022-03-21 17:03 ` Thomas Huth
2022-03-21 17:03 ` [PULL 3/8] hw/audio/intel-hda: Do not ignore DMA overrun errors Thomas Huth
` (6 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: Thomas Huth @ 2022-03-21 17:03 UTC (permalink / raw)
To: qemu-devel, Peter Maydell
Cc: qemu-block, Bin Meng, Philippe Mathieu-Daudé,
Alexander Bulekov, Gerd Hoffmann, Stefan Hajnoczi, Paolo Bonzini
From: Philippe Mathieu-Daudé <philmd@redhat.com>
Add the 'memory' bit to the memory attributes to restrict bus
controller accesses to memories.
Introduce flatview_access_allowed() to check bus permission
before running any bus transaction.
Have read/write accessors return MEMTX_ACCESS_ERROR if an access is
restricted.
There is no change for the default case where 'memory' is not set.
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Message-Id: <20211215182421.418374-4-philmd@redhat.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
[thuth: Replaced MEMTX_BUS_ERROR with MEMTX_ACCESS_ERROR, remove "inline"]
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
include/exec/memattrs.h | 9 +++++++++
softmmu/physmem.c | 44 +++++++++++++++++++++++++++++++++++++++--
2 files changed, 51 insertions(+), 2 deletions(-)
diff --git a/include/exec/memattrs.h b/include/exec/memattrs.h
index 95f2d20d55..9fb98bc1ef 100644
--- a/include/exec/memattrs.h
+++ b/include/exec/memattrs.h
@@ -35,6 +35,14 @@ typedef struct MemTxAttrs {
unsigned int secure:1;
/* Memory access is usermode (unprivileged) */
unsigned int user:1;
+ /*
+ * Bus interconnect and peripherals can access anything (memories,
+ * devices) by default. By setting the 'memory' bit, bus transaction
+ * are restricted to "normal" memories (per the AMBA documentation)
+ * versus devices. Access to devices will be logged and rejected
+ * (see MEMTX_ACCESS_ERROR).
+ */
+ unsigned int memory:1;
/* Requester ID (for MSI for example) */
unsigned int requester_id:16;
/* Invert endianness for this page */
@@ -66,6 +74,7 @@ typedef struct MemTxAttrs {
#define MEMTX_OK 0
#define MEMTX_ERROR (1U << 0) /* device returned an error */
#define MEMTX_DECODE_ERROR (1U << 1) /* nothing at that address */
+#define MEMTX_ACCESS_ERROR (1U << 2) /* access denied */
typedef uint32_t MemTxResult;
#endif
diff --git a/softmmu/physmem.c b/softmmu/physmem.c
index 3d968ca92f..4e1b27a20e 100644
--- a/softmmu/physmem.c
+++ b/softmmu/physmem.c
@@ -42,6 +42,7 @@
#include "qemu/config-file.h"
#include "qemu/error-report.h"
#include "qemu/qemu-print.h"
+#include "qemu/log.h"
#include "qemu/memalign.h"
#include "exec/memory.h"
#include "exec/ioport.h"
@@ -2760,6 +2761,33 @@ static bool prepare_mmio_access(MemoryRegion *mr)
return release_lock;
}
+/**
+ * flatview_access_allowed
+ * @mr: #MemoryRegion to be accessed
+ * @attrs: memory transaction attributes
+ * @addr: address within that memory region
+ * @len: the number of bytes to access
+ *
+ * Check if a memory transaction is allowed.
+ *
+ * Returns: true if transaction is allowed, false if denied.
+ */
+static bool flatview_access_allowed(MemoryRegion *mr, MemTxAttrs attrs,
+ hwaddr addr, hwaddr len)
+{
+ if (likely(!attrs.memory)) {
+ return true;
+ }
+ if (memory_region_is_ram(mr)) {
+ return true;
+ }
+ qemu_log_mask(LOG_GUEST_ERROR,
+ "Invalid access to non-RAM device at "
+ "addr 0x%" HWADDR_PRIX ", size %" HWADDR_PRIu ", "
+ "region '%s'\n", addr, len, memory_region_name(mr));
+ return false;
+}
+
/* Called within RCU critical section. */
static MemTxResult flatview_write_continue(FlatView *fv, hwaddr addr,
MemTxAttrs attrs,
@@ -2774,7 +2802,10 @@ static MemTxResult flatview_write_continue(FlatView *fv, hwaddr addr,
const uint8_t *buf = ptr;
for (;;) {
- if (!memory_access_is_direct(mr, true)) {
+ if (!flatview_access_allowed(mr, attrs, addr1, l)) {
+ result |= MEMTX_ACCESS_ERROR;
+ /* Keep going. */
+ } else if (!memory_access_is_direct(mr, true)) {
release_lock |= prepare_mmio_access(mr);
l = memory_access_size(mr, l, addr1);
/* XXX: could force current_cpu to NULL to avoid
@@ -2819,6 +2850,9 @@ static MemTxResult flatview_write(FlatView *fv, hwaddr addr, MemTxAttrs attrs,
l = len;
mr = flatview_translate(fv, addr, &addr1, &l, true, attrs);
+ if (!flatview_access_allowed(mr, attrs, addr, len)) {
+ return MEMTX_ACCESS_ERROR;
+ }
return flatview_write_continue(fv, addr, attrs, buf, len,
addr1, l, mr);
}
@@ -2837,7 +2871,10 @@ MemTxResult flatview_read_continue(FlatView *fv, hwaddr addr,
fuzz_dma_read_cb(addr, len, mr);
for (;;) {
- if (!memory_access_is_direct(mr, false)) {
+ if (!flatview_access_allowed(mr, attrs, addr1, l)) {
+ result |= MEMTX_ACCESS_ERROR;
+ /* Keep going. */
+ } else if (!memory_access_is_direct(mr, false)) {
/* I/O case */
release_lock |= prepare_mmio_access(mr);
l = memory_access_size(mr, l, addr1);
@@ -2880,6 +2917,9 @@ static MemTxResult flatview_read(FlatView *fv, hwaddr addr,
l = len;
mr = flatview_translate(fv, addr, &addr1, &l, false, attrs);
+ if (!flatview_access_allowed(mr, attrs, addr, len)) {
+ return MEMTX_ACCESS_ERROR;
+ }
return flatview_read_continue(fv, addr, attrs, buf, len,
addr1, l, mr);
}
--
2.27.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PULL 3/8] hw/audio/intel-hda: Do not ignore DMA overrun errors
2022-03-21 17:03 [PULL 0/8] Fix CVE-2021-3611 and heap overflow in sdhci code Thomas Huth
2022-03-21 17:03 ` [PULL 1/8] softmmu/physmem: Simplify flatview_write and address_space_access_valid Thomas Huth
2022-03-21 17:03 ` [PULL 2/8] softmmu/physmem: Introduce MemTxAttrs::memory field and MEMTX_ACCESS_ERROR Thomas Huth
@ 2022-03-21 17:03 ` Thomas Huth
2022-03-21 17:03 ` [PULL 4/8] hw/audio/intel-hda: Restrict DMA engine to memories (not MMIO devices) Thomas Huth
` (5 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: Thomas Huth @ 2022-03-21 17:03 UTC (permalink / raw)
To: qemu-devel, Peter Maydell
Cc: qemu-block, Bin Meng, Philippe Mathieu-Daudé,
Alexander Bulekov, Gerd Hoffmann, Stefan Hajnoczi, Paolo Bonzini
From: Philippe Mathieu-Daudé <philmd@redhat.com>
Per the "High Definition Audio Specification" manual (rev. 1.0a),
section "3.3.30 Offset 5Dh: RIRBSTS - RIRB Status":
Response Overrun Interrupt Status (RIRBOIS):
Hardware sets this bit to a 1 when an overrun occurs in the RIRB.
An interrupt may be generated if the Response Overrun Interrupt
Control bit is set.
This bit will be set if the RIRB DMA engine is not able to write
the incoming responses to memory before additional incoming
responses overrun the internal FIFO.
When hardware detects an overrun, it will drop the responses which
overrun the buffer and set the RIRBOIS status bit to indicate the
error condition. Optionally, if the RIRBOIC is set, the hardware
will also generate an error to alert software to the problem.
QEMU emulates the DMA engine with the stl_le_pci_dma() calls. This
function returns a MemTxResult indicating whether the DMA access
was successful.
Handle any MemTxResult error as "DMA engine is not able to write the
incoming responses to memory" and raise the Overrun Interrupt flag
when this case occurs.
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Message-Id: <20211218160912.1591633-2-philmd@redhat.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
hw/audio/intel-hda.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/hw/audio/intel-hda.c b/hw/audio/intel-hda.c
index 5f8a878f20..47a36acc71 100644
--- a/hw/audio/intel-hda.c
+++ b/hw/audio/intel-hda.c
@@ -350,6 +350,7 @@ static void intel_hda_response(HDACodecDevice *dev, bool solicited, uint32_t res
IntelHDAState *d = container_of(bus, IntelHDAState, codecs);
hwaddr addr;
uint32_t wp, ex;
+ MemTxResult res = MEMTX_OK;
if (d->ics & ICH6_IRS_BUSY) {
dprint(d, 2, "%s: [irr] response 0x%x, cad 0x%x\n",
@@ -368,8 +369,12 @@ static void intel_hda_response(HDACodecDevice *dev, bool solicited, uint32_t res
ex = (solicited ? 0 : (1 << 4)) | dev->cad;
wp = (d->rirb_wp + 1) & 0xff;
addr = intel_hda_addr(d->rirb_lbase, d->rirb_ubase);
- stl_le_pci_dma(&d->pci, addr + 8 * wp, response, attrs);
- stl_le_pci_dma(&d->pci, addr + 8 * wp + 4, ex, attrs);
+ res |= stl_le_pci_dma(&d->pci, addr + 8 * wp, response, attrs);
+ res |= stl_le_pci_dma(&d->pci, addr + 8 * wp + 4, ex, attrs);
+ if (res != MEMTX_OK && (d->rirb_ctl & ICH6_RBCTL_OVERRUN_EN)) {
+ d->rirb_sts |= ICH6_RBSTS_OVERRUN;
+ intel_hda_update_irq(d);
+ }
d->rirb_wp = wp;
dprint(d, 2, "%s: [wp 0x%x] response 0x%x, extra 0x%x\n",
--
2.27.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PULL 4/8] hw/audio/intel-hda: Restrict DMA engine to memories (not MMIO devices)
2022-03-21 17:03 [PULL 0/8] Fix CVE-2021-3611 and heap overflow in sdhci code Thomas Huth
` (2 preceding siblings ...)
2022-03-21 17:03 ` [PULL 3/8] hw/audio/intel-hda: Do not ignore DMA overrun errors Thomas Huth
@ 2022-03-21 17:03 ` Thomas Huth
2022-03-21 17:03 ` [PULL 5/8] tests/qtest/intel-hda-test: Add reproducer for issue #542 Thomas Huth
` (4 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: Thomas Huth @ 2022-03-21 17:03 UTC (permalink / raw)
To: qemu-devel, Peter Maydell
Cc: qemu-block, Bin Meng, Philippe Mathieu-Daudé,
Alexander Bulekov, Gerd Hoffmann, Stefan Hajnoczi, Paolo Bonzini
From: Philippe Mathieu-Daudé <philmd@redhat.com>
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 | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/hw/audio/intel-hda.c b/hw/audio/intel-hda.c
index 47a36acc71..78a47bc08c 100644
--- a/hw/audio/intel-hda.c
+++ b/hw/audio/intel-hda.c
@@ -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;
--
2.27.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PULL 5/8] tests/qtest/intel-hda-test: Add reproducer for issue #542
2022-03-21 17:03 [PULL 0/8] Fix CVE-2021-3611 and heap overflow in sdhci code Thomas Huth
` (3 preceding siblings ...)
2022-03-21 17:03 ` [PULL 4/8] hw/audio/intel-hda: Restrict DMA engine to memories (not MMIO devices) Thomas Huth
@ 2022-03-21 17:03 ` Thomas Huth
2022-03-21 17:03 ` [PULL 6/8] hw/sd/sdhci: Honor failed DMA transactions Thomas Huth
` (3 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: Thomas Huth @ 2022-03-21 17:03 UTC (permalink / raw)
To: qemu-devel, Peter Maydell
Cc: qemu-block, Bin Meng, Philippe Mathieu-Daudé,
Alexander Bulekov, Gerd Hoffmann, Stefan Hajnoczi, Paolo Bonzini
From: Philippe Mathieu-Daudé <philmd@redhat.com>
Include the qtest reproducer provided by Alexander Bulekov
in https://gitlab.com/qemu-project/qemu/-/issues/542.
Without the previous commit, we get:
$ make check-qtest-i386
...
Running test tests/qtest/intel-hda-test
AddressSanitizer:DEADLYSIGNAL
=================================================================
==1580408==ERROR: AddressSanitizer: stack-overflow on address 0x7ffc3d566fe0
#0 0x63d297cf in address_space_translate_internal softmmu/physmem.c:356
#1 0x63d27260 in flatview_do_translate softmmu/physmem.c:499:15
#2 0x63d27af5 in flatview_translate softmmu/physmem.c:565:15
#3 0x63d4ce84 in flatview_write softmmu/physmem.c:2850:10
#4 0x63d4cb18 in address_space_write softmmu/physmem.c:2950:18
#5 0x63d4d387 in address_space_rw softmmu/physmem.c:2960:16
#6 0x62ae12f2 in dma_memory_rw_relaxed include/sysemu/dma.h:89:12
#7 0x62ae104a in dma_memory_rw include/sysemu/dma.h:132:12
#8 0x62ae6157 in dma_memory_write include/sysemu/dma.h:173:12
#9 0x62ae5ec0 in stl_le_dma include/sysemu/dma.h:275:1
#10 0x62ae5ba2 in stl_le_pci_dma include/hw/pci/pci.h:871:1
#11 0x62ad59a6 in intel_hda_response hw/audio/intel-hda.c:372:12
#12 0x62ad2afb in hda_codec_response hw/audio/intel-hda.c:107:5
#13 0x62aec4e1 in hda_audio_command hw/audio/hda-codec.c:655:5
#14 0x62ae05d9 in intel_hda_send_command hw/audio/intel-hda.c:307:5
#15 0x62adff54 in intel_hda_corb_run hw/audio/intel-hda.c:342:9
#16 0x62adc13b in intel_hda_set_corb_wp hw/audio/intel-hda.c:548:5
#17 0x62ae5942 in intel_hda_reg_write hw/audio/intel-hda.c:977:9
#18 0x62ada10a in intel_hda_mmio_write hw/audio/intel-hda.c:1054:5
#19 0x63d8f383 in memory_region_write_accessor softmmu/memory.c:492:5
#20 0x63d8ecc1 in access_with_adjusted_size softmmu/memory.c:554:18
#21 0x63d8d5d6 in memory_region_dispatch_write softmmu/memory.c:1504:16
#22 0x63d5e85e in flatview_write_continue softmmu/physmem.c:2812:23
#23 0x63d4d05b in flatview_write softmmu/physmem.c:2854:12
#24 0x63d4cb18 in address_space_write softmmu/physmem.c:2950:18
#25 0x63d4d387 in address_space_rw softmmu/physmem.c:2960:16
#26 0x62ae12f2 in dma_memory_rw_relaxed include/sysemu/dma.h:89:12
#27 0x62ae104a in dma_memory_rw include/sysemu/dma.h:132:12
#28 0x62ae6157 in dma_memory_write include/sysemu/dma.h:173:12
#29 0x62ae5ec0 in stl_le_dma include/sysemu/dma.h:275:1
#30 0x62ae5ba2 in stl_le_pci_dma include/hw/pci/pci.h:871:1
#31 0x62ad59a6 in intel_hda_response hw/audio/intel-hda.c:372:12
#32 0x62ad2afb in hda_codec_response hw/audio/intel-hda.c:107:5
#33 0x62aec4e1 in hda_audio_command hw/audio/hda-codec.c:655:5
#34 0x62ae05d9 in intel_hda_send_command hw/audio/intel-hda.c:307:5
#35 0x62adff54 in intel_hda_corb_run hw/audio/intel-hda.c:342:9
#36 0x62adc13b in intel_hda_set_corb_wp hw/audio/intel-hda.c:548:5
#37 0x62ae5942 in intel_hda_reg_write hw/audio/intel-hda.c:977:9
#38 0x62ada10a in intel_hda_mmio_write hw/audio/intel-hda.c:1054:5
#39 0x63d8f383 in memory_region_write_accessor softmmu/memory.c:492:5
#40 0x63d8ecc1 in access_with_adjusted_size softmmu/memory.c:554:18
#41 0x63d8d5d6 in memory_region_dispatch_write softmmu/memory.c:1504:16
#42 0x63d5e85e in flatview_write_continue softmmu/physmem.c:2812:23
#43 0x63d4d05b in flatview_write softmmu/physmem.c:2854:12
#44 0x63d4cb18 in address_space_write softmmu/physmem.c:2950:18
#45 0x63d4d387 in address_space_rw softmmu/physmem.c:2960:16
#46 0x62ae12f2 in dma_memory_rw_relaxed include/sysemu/dma.h:89:12
#47 0x62ae104a in dma_memory_rw include/sysemu/dma.h:132:12
#48 0x62ae6157 in dma_memory_write include/sysemu/dma.h:173:12
...
SUMMARY: AddressSanitizer: stack-overflow softmmu/physmem.c:356 in address_space_translate_internal
==1580408==ABORTING
Broken pipe
Aborted (core dumped)
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Acked-by: Thomas Huth <thuth@redhat.com>
Message-Id: <20211218160912.1591633-4-philmd@redhat.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
tests/qtest/intel-hda-test.c | 34 ++++++++++++++++++++++++++++++++++
1 file changed, 34 insertions(+)
diff --git a/tests/qtest/intel-hda-test.c b/tests/qtest/intel-hda-test.c
index fc25ccc33c..a58c98e4d1 100644
--- a/tests/qtest/intel-hda-test.c
+++ b/tests/qtest/intel-hda-test.c
@@ -29,11 +29,45 @@ static void ich9_test(void)
qtest_end();
}
+/*
+ * https://gitlab.com/qemu-project/qemu/-/issues/542
+ * Used to trigger:
+ * AddressSanitizer: stack-overflow
+ */
+static void test_issue542_ich6(void)
+{
+ QTestState *s;
+
+ s = qtest_init("-nographic -nodefaults -M pc-q35-6.2 "
+ "-device intel-hda,id=" HDA_ID CODEC_DEVICES);
+
+ qtest_outl(s, 0xcf8, 0x80000804);
+ qtest_outw(s, 0xcfc, 0x06);
+ qtest_bufwrite(s, 0xff0d060f, "\x03", 1);
+ qtest_bufwrite(s, 0x0, "\x12", 1);
+ qtest_bufwrite(s, 0x2, "\x2a", 1);
+ qtest_writeb(s, 0x0, 0x12);
+ qtest_writeb(s, 0x2, 0x2a);
+ qtest_outl(s, 0xcf8, 0x80000811);
+ qtest_outl(s, 0xcfc, 0x006a4400);
+ qtest_bufwrite(s, 0x6a44005a, "\x01", 1);
+ qtest_bufwrite(s, 0x6a44005c, "\x02", 1);
+ qtest_bufwrite(s, 0x6a442050, "\x00\x00\x44\x6a", 4);
+ qtest_bufwrite(s, 0x6a44204a, "\x01", 1);
+ qtest_bufwrite(s, 0x6a44204c, "\x02", 1);
+ qtest_bufwrite(s, 0x6a44005c, "\x02", 1);
+ qtest_bufwrite(s, 0x6a442050, "\x00\x00\x44\x6a", 4);
+ qtest_bufwrite(s, 0x6a44204a, "\x01", 1);
+ qtest_bufwrite(s, 0x6a44204c, "\x02", 1);
+ qtest_quit(s);
+}
+
int main(int argc, char **argv)
{
g_test_init(&argc, &argv, NULL);
qtest_add_func("/intel-hda/ich6", ich6_test);
qtest_add_func("/intel-hda/ich9", ich9_test);
+ qtest_add_func("/intel-hda/fuzz/issue542", test_issue542_ich6);
return g_test_run();
}
--
2.27.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PULL 6/8] hw/sd/sdhci: Honor failed DMA transactions
2022-03-21 17:03 [PULL 0/8] Fix CVE-2021-3611 and heap overflow in sdhci code Thomas Huth
` (4 preceding siblings ...)
2022-03-21 17:03 ` [PULL 5/8] tests/qtest/intel-hda-test: Add reproducer for issue #542 Thomas Huth
@ 2022-03-21 17:03 ` Thomas Huth
2022-03-21 17:03 ` [PULL 7/8] hw/sd/sdhci: Prohibit DMA accesses to devices Thomas Huth
` (2 subsequent siblings)
8 siblings, 0 replies; 10+ messages in thread
From: Thomas Huth @ 2022-03-21 17:03 UTC (permalink / raw)
To: qemu-devel, Peter Maydell
Cc: qemu-block, Bin Meng, Philippe Mathieu-Daudé,
Alexander Bulekov, Gerd Hoffmann, Stefan Hajnoczi, Paolo Bonzini
From: Philippe Mathieu-Daudé <f4bug@amsat.org>
DMA transactions might fail. The DMA API returns a MemTxResult,
indicating such failures. Do not ignore it. On failure, raise
the ADMA error flag and eventually triggering an IRQ (see spec
chapter 1.13.5: "ADMA2 States").
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Message-Id: <20211215205656.488940-2-philmd@redhat.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
hw/sd/sdhci.c | 34 +++++++++++++++++++++++++---------
1 file changed, 25 insertions(+), 9 deletions(-)
diff --git a/hw/sd/sdhci.c b/hw/sd/sdhci.c
index e0bbc90344..fe2f21f0c3 100644
--- a/hw/sd/sdhci.c
+++ b/hw/sd/sdhci.c
@@ -742,6 +742,7 @@ static void sdhci_do_adma(SDHCIState *s)
unsigned int begin, length;
const uint16_t block_size = s->blksize & BLOCK_SIZE_MASK;
ADMADescr dscr = {};
+ MemTxResult res;
int i;
if (s->trnmod & SDHC_TRNS_BLK_CNT_EN && !s->blkcnt) {
@@ -790,10 +791,13 @@ static void sdhci_do_adma(SDHCIState *s)
s->data_count = block_size;
length -= block_size - begin;
}
- dma_memory_write(s->dma_as, dscr.addr,
- &s->fifo_buffer[begin],
- s->data_count - begin,
- MEMTXATTRS_UNSPECIFIED);
+ res = dma_memory_write(s->dma_as, dscr.addr,
+ &s->fifo_buffer[begin],
+ s->data_count - begin,
+ MEMTXATTRS_UNSPECIFIED);
+ if (res != MEMTX_OK) {
+ break;
+ }
dscr.addr += s->data_count - begin;
if (s->data_count == block_size) {
s->data_count = 0;
@@ -816,10 +820,13 @@ static void sdhci_do_adma(SDHCIState *s)
s->data_count = block_size;
length -= block_size - begin;
}
- dma_memory_read(s->dma_as, dscr.addr,
- &s->fifo_buffer[begin],
- s->data_count - begin,
- MEMTXATTRS_UNSPECIFIED);
+ res = dma_memory_read(s->dma_as, dscr.addr,
+ &s->fifo_buffer[begin],
+ s->data_count - begin,
+ MEMTXATTRS_UNSPECIFIED);
+ if (res != MEMTX_OK) {
+ break;
+ }
dscr.addr += s->data_count - begin;
if (s->data_count == block_size) {
sdbus_write_data(&s->sdbus, s->fifo_buffer, block_size);
@@ -833,7 +840,16 @@ static void sdhci_do_adma(SDHCIState *s)
}
}
}
- s->admasysaddr += dscr.incr;
+ if (res != MEMTX_OK) {
+ if (s->errintstsen & SDHC_EISEN_ADMAERR) {
+ trace_sdhci_error("Set ADMA error flag");
+ s->errintsts |= SDHC_EIS_ADMAERR;
+ s->norintsts |= SDHC_NIS_ERR;
+ }
+ sdhci_update_irq(s);
+ } else {
+ s->admasysaddr += dscr.incr;
+ }
break;
case SDHC_ADMA_ATTR_ACT_LINK: /* link to next descriptor table */
s->admasysaddr = dscr.addr;
--
2.27.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PULL 7/8] hw/sd/sdhci: Prohibit DMA accesses to devices
2022-03-21 17:03 [PULL 0/8] Fix CVE-2021-3611 and heap overflow in sdhci code Thomas Huth
` (5 preceding siblings ...)
2022-03-21 17:03 ` [PULL 6/8] hw/sd/sdhci: Honor failed DMA transactions Thomas Huth
@ 2022-03-21 17:03 ` Thomas Huth
2022-03-21 17:03 ` [PULL 8/8] tests/qtest/fuzz-sdcard-test: Add reproducer for OSS-Fuzz (Issue 29225) Thomas Huth
2022-03-22 22:58 ` [PULL 0/8] Fix CVE-2021-3611 and heap overflow in sdhci code Peter Maydell
8 siblings, 0 replies; 10+ messages in thread
From: Thomas Huth @ 2022-03-21 17:03 UTC (permalink / raw)
To: qemu-devel, Peter Maydell
Cc: qemu-block, Bin Meng, Philippe Mathieu-Daudé,
Alexander Bulekov, Gerd Hoffmann, Stefan Hajnoczi, Paolo Bonzini
From: Philippe Mathieu-Daudé <f4bug@amsat.org>
The issue reported by OSS-Fuzz produces the following backtrace:
==447470==ERROR: AddressSanitizer: heap-buffer-overflow
READ of size 1 at 0x61500002a080 thread T0
#0 0x71766d47 in sdhci_read_dataport hw/sd/sdhci.c:474:18
#1 0x7175f139 in sdhci_read hw/sd/sdhci.c:1022:19
#2 0x721b937b in memory_region_read_accessor softmmu/memory.c:440:11
#3 0x72171e51 in access_with_adjusted_size softmmu/memory.c:554:18
#4 0x7216f47c in memory_region_dispatch_read1 softmmu/memory.c:1424:16
#5 0x7216ebb9 in memory_region_dispatch_read softmmu/memory.c:1452:9
#6 0x7212db5d in flatview_read_continue softmmu/physmem.c:2879:23
#7 0x7212f958 in flatview_read softmmu/physmem.c:2921:12
#8 0x7212f418 in address_space_read_full softmmu/physmem.c:2934:18
#9 0x721305a9 in address_space_rw softmmu/physmem.c:2962:16
#10 0x7175a392 in dma_memory_rw_relaxed include/sysemu/dma.h:89:12
#11 0x7175a0ea in dma_memory_rw include/sysemu/dma.h:132:12
#12 0x71759684 in dma_memory_read include/sysemu/dma.h:152:12
#13 0x7175518c in sdhci_do_adma hw/sd/sdhci.c:823:27
#14 0x7174bf69 in sdhci_data_transfer hw/sd/sdhci.c:935:13
#15 0x7176aaa7 in sdhci_send_command hw/sd/sdhci.c:376:9
#16 0x717629ee in sdhci_write hw/sd/sdhci.c:1212:9
#17 0x72172513 in memory_region_write_accessor softmmu/memory.c:492:5
#18 0x72171e51 in access_with_adjusted_size softmmu/memory.c:554:18
#19 0x72170766 in memory_region_dispatch_write softmmu/memory.c:1504:16
#20 0x721419ee in flatview_write_continue softmmu/physmem.c:2812:23
#21 0x721301eb in flatview_write softmmu/physmem.c:2854:12
#22 0x7212fca8 in address_space_write softmmu/physmem.c:2950:18
#23 0x721d9a53 in qtest_process_command softmmu/qtest.c:727:9
A DMA descriptor is previously filled in RAM. An I/O access to the
device (frames #22 to #16) start the DMA engine (frame #13). The
engine fetch the descriptor and execute the request, which itself
accesses the SDHCI I/O registers (frame #1 and #0), triggering a
re-entrancy issue.
Fix by prohibit transactions from the DMA to devices. The DMA engine
is thus restricted to memories.
Reported-by: OSS-Fuzz (Issue 36391)
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/451
Message-Id: <20211215205656.488940-3-philmd@redhat.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
hw/sd/sdhci.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/hw/sd/sdhci.c b/hw/sd/sdhci.c
index fe2f21f0c3..0e5e988927 100644
--- a/hw/sd/sdhci.c
+++ b/hw/sd/sdhci.c
@@ -741,6 +741,7 @@ static void sdhci_do_adma(SDHCIState *s)
{
unsigned int begin, length;
const uint16_t block_size = s->blksize & BLOCK_SIZE_MASK;
+ const MemTxAttrs attrs = { .memory = true };
ADMADescr dscr = {};
MemTxResult res;
int i;
@@ -794,7 +795,7 @@ static void sdhci_do_adma(SDHCIState *s)
res = dma_memory_write(s->dma_as, dscr.addr,
&s->fifo_buffer[begin],
s->data_count - begin,
- MEMTXATTRS_UNSPECIFIED);
+ attrs);
if (res != MEMTX_OK) {
break;
}
@@ -823,7 +824,7 @@ static void sdhci_do_adma(SDHCIState *s)
res = dma_memory_read(s->dma_as, dscr.addr,
&s->fifo_buffer[begin],
s->data_count - begin,
- MEMTXATTRS_UNSPECIFIED);
+ attrs);
if (res != MEMTX_OK) {
break;
}
--
2.27.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PULL 8/8] tests/qtest/fuzz-sdcard-test: Add reproducer for OSS-Fuzz (Issue 29225)
2022-03-21 17:03 [PULL 0/8] Fix CVE-2021-3611 and heap overflow in sdhci code Thomas Huth
` (6 preceding siblings ...)
2022-03-21 17:03 ` [PULL 7/8] hw/sd/sdhci: Prohibit DMA accesses to devices Thomas Huth
@ 2022-03-21 17:03 ` Thomas Huth
2022-03-22 22:58 ` [PULL 0/8] Fix CVE-2021-3611 and heap overflow in sdhci code Peter Maydell
8 siblings, 0 replies; 10+ messages in thread
From: Thomas Huth @ 2022-03-21 17:03 UTC (permalink / raw)
To: qemu-devel, Peter Maydell
Cc: qemu-block, Bin Meng, Philippe Mathieu-Daudé,
Alexander Bulekov, Gerd Hoffmann, Stefan Hajnoczi, Paolo Bonzini
From: Philippe Mathieu-Daudé <philmd@redhat.com>
Include the qtest reproducer provided by Alexander Bulekov
in https://gitlab.com/qemu-project/qemu/-/issues/451. Without
the previous commit, we get:
$ make check-qtest-i386
...
Running test qtest-i386/fuzz-sdcard-test
==447470==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x61500002a080 at pc 0x564c71766d48 bp 0x7ffc126c62b0 sp 0x7ffc126c62a8
READ of size 1 at 0x61500002a080 thread T0
#0 0x564c71766d47 in sdhci_read_dataport hw/sd/sdhci.c:474:18
#1 0x564c7175f139 in sdhci_read hw/sd/sdhci.c:1022:19
#2 0x564c721b937b in memory_region_read_accessor softmmu/memory.c:440:11
#3 0x564c72171e51 in access_with_adjusted_size softmmu/memory.c:554:18
#4 0x564c7216f47c in memory_region_dispatch_read1 softmmu/memory.c:1424:16
#5 0x564c7216ebb9 in memory_region_dispatch_read softmmu/memory.c:1452:9
#6 0x564c7212db5d in flatview_read_continue softmmu/physmem.c:2879:23
#7 0x564c7212f958 in flatview_read softmmu/physmem.c:2921:12
#8 0x564c7212f418 in address_space_read_full softmmu/physmem.c:2934:18
#9 0x564c721305a9 in address_space_rw softmmu/physmem.c:2962:16
#10 0x564c7175a392 in dma_memory_rw_relaxed include/sysemu/dma.h:89:12
#11 0x564c7175a0ea in dma_memory_rw include/sysemu/dma.h:132:12
#12 0x564c71759684 in dma_memory_read include/sysemu/dma.h:152:12
#13 0x564c7175518c in sdhci_do_adma hw/sd/sdhci.c:823:27
#14 0x564c7174bf69 in sdhci_data_transfer hw/sd/sdhci.c:935:13
#15 0x564c7176aaa7 in sdhci_send_command hw/sd/sdhci.c:376:9
#16 0x564c717629ee in sdhci_write hw/sd/sdhci.c:1212:9
#17 0x564c72172513 in memory_region_write_accessor softmmu/memory.c:492:5
#18 0x564c72171e51 in access_with_adjusted_size softmmu/memory.c:554:18
#19 0x564c72170766 in memory_region_dispatch_write softmmu/memory.c:1504:16
#20 0x564c721419ee in flatview_write_continue softmmu/physmem.c:2812:23
#21 0x564c721301eb in flatview_write softmmu/physmem.c:2854:12
#22 0x564c7212fca8 in address_space_write softmmu/physmem.c:2950:18
#23 0x564c721d9a53 in qtest_process_command softmmu/qtest.c:727:9
0x61500002a080 is located 0 bytes to the right of 512-byte region [0x615000029e80,0x61500002a080)
allocated by thread T0 here:
#0 0x564c708e1737 in __interceptor_calloc (qemu-system-i386+0x1e6a737)
#1 0x7ff05567b5e0 in g_malloc0 (/lib64/libglib-2.0.so.0+0x5a5e0)
#2 0x564c71774adb in sdhci_pci_realize hw/sd/sdhci-pci.c:36:5
SUMMARY: AddressSanitizer: heap-buffer-overflow hw/sd/sdhci.c:474:18 in sdhci_read_dataport
Shadow bytes around the buggy address:
0x0c2a7fffd3c0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c2a7fffd3d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0c2a7fffd3e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0c2a7fffd3f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0c2a7fffd400: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
=>0x0c2a7fffd410:[fa]fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c2a7fffd420: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x0c2a7fffd430: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x0c2a7fffd440: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x0c2a7fffd450: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x0c2a7fffd460: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
Shadow byte legend (one shadow byte represents 8 application bytes):
Addressable: 00
Heap left redzone: fa
Freed heap region: fd
==447470==ABORTING
Broken pipe
ERROR qtest-i386/fuzz-sdcard-test - too few tests run (expected 3, got 2)
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Acked-by: Thomas Huth <thuth@redhat.com>
Message-Id: <20211215205656.488940-4-philmd@redhat.com>
[thuth: Replaced "-m 4G" with "-m 512M"]
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
tests/qtest/fuzz-sdcard-test.c | 76 ++++++++++++++++++++++++++++++++++
1 file changed, 76 insertions(+)
diff --git a/tests/qtest/fuzz-sdcard-test.c b/tests/qtest/fuzz-sdcard-test.c
index ae14305344..0f94965a66 100644
--- a/tests/qtest/fuzz-sdcard-test.c
+++ b/tests/qtest/fuzz-sdcard-test.c
@@ -87,6 +87,81 @@ static void oss_fuzz_36217(void)
qtest_quit(s);
}
+/*
+ * https://gitlab.com/qemu-project/qemu/-/issues/451
+ * Used to trigger a heap buffer overflow.
+ */
+static void oss_fuzz_36391(void)
+{
+ QTestState *s;
+
+ s = qtest_init(" -display none -m 512M -nodefaults -nographic"
+ " -device sdhci-pci,sd-spec-version=3"
+ " -device sd-card,drive=drv"
+ " -drive if=none,index=0,file=null-co://,format=raw,id=drv");
+ qtest_outl(s, 0xcf8, 0x80001010);
+ qtest_outl(s, 0xcfc, 0xe0000000);
+ qtest_outl(s, 0xcf8, 0x80001004);
+ qtest_outw(s, 0xcfc, 0x7);
+ qtest_bufwrite(s, 0xe0000005, "\x73", 0x1);
+ qtest_bufwrite(s, 0xe0000028, "\x55", 0x1);
+ qtest_bufwrite(s, 0xe000002c, "\x55", 0x1);
+ qtest_bufwrite(s, 0x0, "\x65", 0x1);
+ qtest_bufwrite(s, 0x7, "\x69", 0x1);
+ qtest_bufwrite(s, 0x8, "\x65", 0x1);
+ qtest_bufwrite(s, 0xf, "\x69", 0x1);
+ qtest_bufwrite(s, 0x10, "\x65", 0x1);
+ qtest_bufwrite(s, 0x17, "\x69", 0x1);
+ qtest_bufwrite(s, 0x18, "\x65", 0x1);
+ qtest_bufwrite(s, 0x1f, "\x69", 0x1);
+ qtest_bufwrite(s, 0x20, "\x65", 0x1);
+ qtest_bufwrite(s, 0x27, "\x69", 0x1);
+ qtest_bufwrite(s, 0x28, "\x65", 0x1);
+ qtest_bufwrite(s, 0x2f, "\x69", 0x1);
+ qtest_bufwrite(s, 0x30, "\x65", 0x1);
+ qtest_bufwrite(s, 0x37, "\x69", 0x1);
+ qtest_bufwrite(s, 0x38, "\x65", 0x1);
+ qtest_bufwrite(s, 0x3f, "\x69", 0x1);
+ qtest_bufwrite(s, 0x40, "\x65", 0x1);
+ qtest_bufwrite(s, 0x47, "\x69", 0x1);
+ qtest_bufwrite(s, 0x48, "\x65", 0x1);
+ qtest_bufwrite(s, 0xe000000c, "\x55", 0x1);
+ qtest_bufwrite(s, 0xe000000e, "\x2c", 0x1);
+ qtest_bufwrite(s, 0xe000000f, "\x5b", 0x1);
+ qtest_bufwrite(s, 0xe0000010, "\x06\x46", 0x2);
+ qtest_bufwrite(s, 0x50, "\x65", 0x1);
+ qtest_bufwrite(s, 0x57, "\x69", 0x1);
+ qtest_bufwrite(s, 0x58, "\x65", 0x1);
+ qtest_bufwrite(s, 0x5f, "\x69", 0x1);
+ qtest_bufwrite(s, 0x60, "\x65", 0x1);
+ qtest_bufwrite(s, 0x67, "\x69", 0x1);
+ qtest_bufwrite(s, 0x68, "\x65", 0x1);
+ qtest_bufwrite(s, 0x6f, "\x69", 0x1);
+ qtest_bufwrite(s, 0x70, "\x65", 0x1);
+ qtest_bufwrite(s, 0x77, "\x69", 0x1);
+ qtest_bufwrite(s, 0x78, "\x65", 0x1);
+ qtest_bufwrite(s, 0x7f, "\x69", 0x1);
+ qtest_bufwrite(s, 0x80, "\x65", 0x1);
+ qtest_bufwrite(s, 0x87, "\x69", 0x1);
+ qtest_bufwrite(s, 0x88, "\x65", 0x1);
+ qtest_bufwrite(s, 0x8f, "\x69", 0x1);
+ qtest_bufwrite(s, 0x90, "\x65", 0x1);
+ qtest_bufwrite(s, 0x97, "\x69", 0x1);
+ qtest_bufwrite(s, 0x98, "\x65", 0x1);
+ qtest_bufwrite(s, 0xe0000026, "\x5a\x06", 0x2);
+ qtest_bufwrite(s, 0xe0000028, "\x46\xc0\xc9\xc9", 0x4);
+ qtest_bufwrite(s, 0xe0000028, "\x55", 0x1);
+ qtest_bufwrite(s, 0xe000002a, "\x5a", 0x1);
+ qtest_bufwrite(s, 0xa0, "\x65", 0x1);
+ qtest_bufwrite(s, 0xa5, "\xff", 0x1);
+ qtest_bufwrite(s, 0xa6, "\xff", 0x1);
+ qtest_bufwrite(s, 0xa7, "\xdf", 0x1);
+ qtest_bufwrite(s, 0xe000000c, "\x27", 0x1);
+ qtest_bufwrite(s, 0xe000000f, "\x55", 0x1);
+
+ qtest_quit(s);
+}
+
int main(int argc, char **argv)
{
const char *arch = qtest_get_arch();
@@ -96,6 +171,7 @@ int main(int argc, char **argv)
if (strcmp(arch, "i386") == 0) {
qtest_add_func("fuzz/sdcard/oss_fuzz_29225", oss_fuzz_29225);
qtest_add_func("fuzz/sdcard/oss_fuzz_36217", oss_fuzz_36217);
+ qtest_add_func("fuzz/sdcard/oss_fuzz_36391", oss_fuzz_36391);
}
return g_test_run();
--
2.27.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PULL 0/8] Fix CVE-2021-3611 and heap overflow in sdhci code
2022-03-21 17:03 [PULL 0/8] Fix CVE-2021-3611 and heap overflow in sdhci code Thomas Huth
` (7 preceding siblings ...)
2022-03-21 17:03 ` [PULL 8/8] tests/qtest/fuzz-sdcard-test: Add reproducer for OSS-Fuzz (Issue 29225) Thomas Huth
@ 2022-03-22 22:58 ` Peter Maydell
8 siblings, 0 replies; 10+ messages in thread
From: Peter Maydell @ 2022-03-22 22:58 UTC (permalink / raw)
To: Thomas Huth
Cc: qemu-block, Bin Meng, qemu-devel, Philippe Mathieu-Daudé,
Alexander Bulekov, Gerd Hoffmann, Stefan Hajnoczi, Paolo Bonzini
On Mon, 21 Mar 2022 at 17:03, Thomas Huth <thuth@redhat.com> wrote:
>
> The following changes since commit 2058fdbe81e2985c226a026851dd26b146d3395c:
>
> Merge tag 'fixes-20220318-pull-request' of git://git.kraxel.org/qemu into staging (2022-03-19 11:28:54 +0000)
>
> are available in the Git repository at:
>
> https://gitlab.com/thuth/qemu.git tags/pull-request-2022-03-21
>
> for you to fetch changes up to 27801168ecbb34b987d2e92a12369367bf9ac2bf:
>
> tests/qtest/fuzz-sdcard-test: Add reproducer for OSS-Fuzz (Issue 29225) (2022-03-21 14:05:42 +0100)
>
> ----------------------------------------------------------------
> * Fix stack-overflow due to recursive DMA in intel-hda (CVE-2021-3611)
> * Fix heap overflow due to recursive DMA in sdhci code
>
> ----------------------------------------------------------------
>
Applied, thanks.
Please update the changelog at https://wiki.qemu.org/ChangeLog/7.0
for any user-visible changes.
-- PMM
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2022-03-22 22:59 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-03-21 17:03 [PULL 0/8] Fix CVE-2021-3611 and heap overflow in sdhci code Thomas Huth
2022-03-21 17:03 ` [PULL 1/8] softmmu/physmem: Simplify flatview_write and address_space_access_valid Thomas Huth
2022-03-21 17:03 ` [PULL 2/8] softmmu/physmem: Introduce MemTxAttrs::memory field and MEMTX_ACCESS_ERROR Thomas Huth
2022-03-21 17:03 ` [PULL 3/8] hw/audio/intel-hda: Do not ignore DMA overrun errors Thomas Huth
2022-03-21 17:03 ` [PULL 4/8] hw/audio/intel-hda: Restrict DMA engine to memories (not MMIO devices) Thomas Huth
2022-03-21 17:03 ` [PULL 5/8] tests/qtest/intel-hda-test: Add reproducer for issue #542 Thomas Huth
2022-03-21 17:03 ` [PULL 6/8] hw/sd/sdhci: Honor failed DMA transactions Thomas Huth
2022-03-21 17:03 ` [PULL 7/8] hw/sd/sdhci: Prohibit DMA accesses to devices Thomas Huth
2022-03-21 17:03 ` [PULL 8/8] tests/qtest/fuzz-sdcard-test: Add reproducer for OSS-Fuzz (Issue 29225) Thomas Huth
2022-03-22 22:58 ` [PULL 0/8] Fix CVE-2021-3611 and heap overflow in sdhci code Peter Maydell
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).