[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 32/41] hw/usb/hcd-xhci: Avoid variable-length array in xhci_get_po
From: |
Philippe Mathieu-Daudé |
Subject: |
[PULL 32/41] hw/usb/hcd-xhci: Avoid variable-length array in xhci_get_port_bandwidth() |
Date: |
Thu, 31 Aug 2023 14:56:34 +0200 |
From: Peter Maydell <peter.maydell@linaro.org>
In xhci_get_port_bandwidth(), we use a variable-length array to
construct the buffer to send back to the guest. Avoid the VLA
by using dma_memory_set() to directly request the memory system
to fill the guest memory with a string of '80's.
The codebase has very few VLAs, and if we can get rid of them all we
can make the compiler error on new additions. This is a defensive
measure against security bugs where an on-stack dynamic allocation
isn't correctly size-checked (e.g. CVE-2021-3527).
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-ID: <20230824164818.2652452-1-peter.maydell@linaro.org>
---
hw/usb/hcd-xhci.c | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c
index b89b618ec2..324177ad5d 100644
--- a/hw/usb/hcd-xhci.c
+++ b/hw/usb/hcd-xhci.c
@@ -2434,7 +2434,6 @@ static void xhci_detach_slot(XHCIState *xhci, USBPort
*uport)
static TRBCCode xhci_get_port_bandwidth(XHCIState *xhci, uint64_t pctx)
{
dma_addr_t ctx;
- uint8_t bw_ctx[xhci->numports+1];
DPRINTF("xhci_get_port_bandwidth()\n");
@@ -2442,11 +2441,10 @@ static TRBCCode xhci_get_port_bandwidth(XHCIState
*xhci, uint64_t pctx)
DPRINTF("xhci: bandwidth context at "DMA_ADDR_FMT"\n", ctx);
- /* TODO: actually implement real values here */
- bw_ctx[0] = 0;
- memset(&bw_ctx[1], 80, xhci->numports); /* 80% */
- if (dma_memory_write(xhci->as, ctx, bw_ctx, sizeof(bw_ctx),
- MEMTXATTRS_UNSPECIFIED) != MEMTX_OK) {
+ /* TODO: actually implement real values here. This is 80% for all ports. */
+ if (stb_dma(xhci->as, ctx, 0, MEMTXATTRS_UNSPECIFIED) != MEMTX_OK ||
+ dma_memory_set(xhci->as, ctx + 1, 80, xhci->numports,
+ MEMTXATTRS_UNSPECIFIED) != MEMTX_OK) {
qemu_log_mask(LOG_GUEST_ERROR, "%s: DMA memory write failed!\n",
__func__);
return CC_TRB_ERROR;
--
2.41.0
- [PULL 16/41] target/xtensa: Include missing 'qemu/atomic.h' header, (continued)
- [PULL 16/41] target/xtensa: Include missing 'qemu/atomic.h' header, Philippe Mathieu-Daudé, 2023/08/31
- [PULL 21/41] hw/char/pl011: Restrict MemoryRegionOps implementation access sizes, Philippe Mathieu-Daudé, 2023/08/31
- [PULL 24/41] hw/char/pl011: Replace magic values by register field definitions, Philippe Mathieu-Daudé, 2023/08/31
- [PULL 23/41] hw/char/pl011: Remove duplicated PL011_INT_[RT]X definitions, Philippe Mathieu-Daudé, 2023/08/31
- [PULL 25/41] hw/i2c/pmbus_device: Fix modifying QOM class internals from instance, Philippe Mathieu-Daudé, 2023/08/31
- [PULL 26/41] hw/i2c: spelling fixes, Philippe Mathieu-Daudé, 2023/08/31
- [PULL 27/41] hw/ide: spelling fixes, Philippe Mathieu-Daudé, 2023/08/31
- [PULL 29/41] hw/mips: spelling fixes, Philippe Mathieu-Daudé, 2023/08/31
- [PULL 30/41] hw/sd: spelling fixes, Philippe Mathieu-Daudé, 2023/08/31
- [PULL 31/41] hw/usb: spelling fixes, Philippe Mathieu-Daudé, 2023/08/31
- [PULL 32/41] hw/usb/hcd-xhci: Avoid variable-length array in xhci_get_port_bandwidth(),
Philippe Mathieu-Daudé <=
- [PULL 33/41] hw/i386: Remove unuseful kvmclock_create() stub, Philippe Mathieu-Daudé, 2023/08/31
- [PULL 35/41] util/fifo8: Fix typo in fifo8_push_all() description, Philippe Mathieu-Daudé, 2023/08/31
- [PULL 34/41] hw/i386: Rename 'hw/kvm/clock.h' -> 'hw/i386/kvm/clock.h', Philippe Mathieu-Daudé, 2023/08/31
- [PULL 36/41] util: spelling fixes, Philippe Mathieu-Daudé, 2023/08/31
- [PULL 40/41] build: Only define OS_OBJECT_USE_OBJC with gcc, Philippe Mathieu-Daudé, 2023/08/31
- [PULL 28/41] hw/display: spelling fixes, Philippe Mathieu-Daudé, 2023/08/31
- [PULL 37/41] ui: spelling fixes, Philippe Mathieu-Daudé, 2023/08/31
- [PULL 38/41] docs/style: permit inline loop variables, Philippe Mathieu-Daudé, 2023/08/31
- [PULL 39/41] meson: Fix MESONINTROSPECT parsing, Philippe Mathieu-Daudé, 2023/08/31