From 13eef6a87a718876bf33d6fe1a947f8972362470 Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Thu, 13 Feb 2025 11:57:54 +0100 Subject: [PATCH] genode_c_api/usb: fix size calculation of isoc_payload simplify and fix wrong calculation of 'size' for isoc_payload. --- repos/os/src/lib/genode_c_api/usb.cc | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/repos/os/src/lib/genode_c_api/usb.cc b/repos/os/src/lib/genode_c_api/usb.cc index 3645f88a9a..5f7defab7a 100644 --- a/repos/os/src/lib/genode_c_api/usb.cc +++ b/repos/os/src/lib/genode_c_api/usb.cc @@ -813,13 +813,15 @@ Interface_component::_handle_request(Constructible &cpd, { genode_usb_isoc_transfer_header & hdr = *reinterpret_cast(payload.addr); + + size_t const header_size = sizeof(genode_usb_isoc_transfer_header) + + (hdr.number_of_packets * + sizeof(genode_usb_isoc_descriptor)); + genode_buffer_t isoc_payload { - (void*) ((addr_t)payload.addr + - sizeof(genode_usb_isoc_transfer_header) + - (hdr.number_of_packets * - sizeof(genode_usb_isoc_descriptor))), - payload.size - sizeof(genode_usb_isoc_transfer_header) + - hdr.number_of_packets * sizeof(genode_usb_isoc_descriptor) }; + (void *)(addr_t(payload.addr) + header_size), + payload.size - header_size }; + cbs->isoc_fn(handle, cpd->index, hdr.number_of_packets, hdr.packets, isoc_payload, opaque_data); break;