Skip to content

Commit d5a61f1

Browse files
committed
core: bound USB DMA response writebacks.
1 parent 4bf218b commit d5a61f1

1 file changed

Lines changed: 5 additions & 1 deletion

File tree

core/usb/usb.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -550,7 +550,11 @@ static int usb_dispatch_event(usb_traversal_state_t *state) {
550550
case USB_TRANSFER_RESPONSE_EVENT:
551551
if (usb.event.host) {
552552
if (!transfer->direction) {
553-
mem_dma_write(transfer->buffer, usb.regs.dma_addr, DMACTRL_LEN(usb.regs.dma_ctrl));
553+
uint32_t dma_length = DMACTRL_LEN(usb.regs.dma_ctrl);
554+
uint32_t write_length = transfer->length < dma_length ? transfer->length : dma_length;
555+
if (write_length) {
556+
mem_dma_write(transfer->buffer, usb.regs.dma_addr, write_length);
557+
}
554558
}
555559
if (transfer->length) {
556560
//gui_console_printf("usb_grp2_int(%s);\n", transfer->status == USB_TRANSFER_COMPLETED ? "GISR2_DMAFIN" : "GISR2_DMAERR");

0 commit comments

Comments
 (0)