From 2ce316ccc82173ded086f0fb4ef65027b5f613f0 Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Mon, 20 Sep 2021 11:12:54 -0400 Subject: [PATCH] USB: Refuse transfer submission on pipes that are being removed. This mostly only matters for the Device DefaultPipe, which is still accesible even after its USBID has been put, but it makes sense to do this in general, too. Change-Id: I6711f1ce8fe79dff54927e3b5e60dec15bb58b14 Reviewed-on: https://review.haiku-os.org/c/haiku/+/4489 Reviewed-by: waddlesplash --- src/add-ons/kernel/bus_managers/usb/Pipe.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/add-ons/kernel/bus_managers/usb/Pipe.cpp b/src/add-ons/kernel/bus_managers/usb/Pipe.cpp index 4ec27dc18a..106b8857ec 100644 --- a/src/add-ons/kernel/bus_managers/usb/Pipe.cpp +++ b/src/add-ons/kernel/bus_managers/usb/Pipe.cpp @@ -68,6 +68,9 @@ Pipe::SetHubInfo(int8 address, uint8 port) status_t Pipe::SubmitTransfer(Transfer *transfer) { + if (USBID() == UINT32_MAX) + return B_NO_INIT; + // ToDo: keep track of all submited transfers to be able to cancel them return GetBusManager()->SubmitTransfer(transfer); } @@ -444,6 +447,9 @@ ControlPipe::QueueRequest(uint8 requestType, uint8 request, uint16 value, if (dataLength > 0 && data == NULL) return B_BAD_VALUE; + if (USBID() == UINT32_MAX) + return B_NO_INIT; + usb_request_data *requestData = new(std::nothrow) usb_request_data; if (!requestData) return B_NO_MEMORY;