diff --git a/repos/dde_linux/src/drivers/usb/raw/raw.cc b/repos/dde_linux/src/drivers/usb/raw/raw.cc index efa86bf29b..564fea4aeb 100644 --- a/repos/dde_linux/src/drivers/usb/raw/raw.cc +++ b/repos/dde_linux/src/drivers/usb/raw/raw.cc @@ -341,6 +341,14 @@ class Usb::Worker : public Genode::Weak_object usb_host_endpoint *ep = read ? _device->udev->ep_in[p.transfer.ep & 0x0f] : _device->udev->ep_out[p.transfer.ep & 0x0f]; + + if (!ep) { + error("could not get ep: ", p.transfer.ep); + dma_free(buf); + p.error = Usb::Packet_descriptor::SUBMIT_ERROR; + return false; + } + polling_interval = ep->desc.bInterval; } else @@ -382,6 +390,13 @@ class Usb::Worker : public Genode::Weak_object Genode::memcpy(buf, _sink->packet_content(p), p.size()); } + if (!ep) { + error("could not get ep: ", p.transfer.ep); + dma_free(buf); + p.error = Usb::Packet_descriptor::SUBMIT_ERROR; + return false; + } + urb *urb = usb_alloc_urb(p.transfer.number_of_packets, GFP_KERNEL); if (!urb) { error("Failed to allocate isochronous URB"); diff --git a/repos/dde_linux/src/drivers/usb_host/raw.cc b/repos/dde_linux/src/drivers/usb_host/raw.cc index 4aa4b213d6..1d3b87684c 100644 --- a/repos/dde_linux/src/drivers/usb_host/raw.cc +++ b/repos/dde_linux/src/drivers/usb_host/raw.cc @@ -352,6 +352,14 @@ class Usb::Worker : public Genode::Weak_object usb_host_endpoint *ep = read ? _device->udev->ep_in[p.transfer.ep & 0x0f] : _device->udev->ep_out[p.transfer.ep & 0x0f]; + + if (!ep) { + error("could not get ep: ", p.transfer.ep); + dma_free(buf); + p.error = Usb::Packet_descriptor::SUBMIT_ERROR; + return false; + } + polling_interval = ep->desc.bInterval; } else @@ -393,6 +401,13 @@ class Usb::Worker : public Genode::Weak_object Genode::memcpy(buf, _sink->packet_content(p), p.size()); } + if (!ep) { + error("could not get ep: ", p.transfer.ep); + dma_free(buf); + p.error = Usb::Packet_descriptor::SUBMIT_ERROR; + return false; + } + urb *urb = usb_alloc_urb(p.transfer.number_of_packets, GFP_KERNEL); if (!urb) { error("Failed to allocate isochronous URB");