From 4f8124c5e3d373af43c3f447363dec8555f84bce Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Mon, 17 Jun 2019 19:14:29 -0400 Subject: [PATCH] USB: Add initialization checks to Pipe usages of Device. Complements the ones added earlier to the module itself. Should fix the panic portion of #15115. --- src/add-ons/kernel/bus_managers/usb/Pipe.cpp | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/add-ons/kernel/bus_managers/usb/Pipe.cpp b/src/add-ons/kernel/bus_managers/usb/Pipe.cpp index 6d976639c8..4f590d8866 100644 --- a/src/add-ons/kernel/bus_managers/usb/Pipe.cpp +++ b/src/add-ons/kernel/bus_managers/usb/Pipe.cpp @@ -82,7 +82,11 @@ status_t Pipe::SetFeature(uint16 selector) { TRACE("set feature %u\n", selector); - return ((Device *)Parent())->DefaultPipe()->SendRequest( + Device *device = (Device *)Parent(); + if (device->InitCheck() != B_OK) + return B_NO_INIT; + + return device->DefaultPipe()->SendRequest( USB_REQTYPE_STANDARD | USB_REQTYPE_ENDPOINT_OUT, USB_REQUEST_SET_FEATURE, selector, @@ -98,12 +102,16 @@ Pipe::SetFeature(uint16 selector) status_t Pipe::ClearFeature(uint16 selector) { + Device *device = (Device *)Parent(); + if (device->InitCheck() != B_OK) + return B_NO_INIT; + // clearing a stalled condition resets the data toggle if (selector == USB_FEATURE_ENDPOINT_HALT) SetDataToggle(false); TRACE("clear feature %u\n", selector); - return ((Device *)Parent())->DefaultPipe()->SendRequest( + return device->DefaultPipe()->SendRequest( USB_REQTYPE_STANDARD | USB_REQTYPE_ENDPOINT_OUT, USB_REQUEST_CLEAR_FEATURE, selector, @@ -120,7 +128,11 @@ status_t Pipe::GetStatus(uint16 *status) { TRACE("get status\n"); - return ((Device *)Parent())->DefaultPipe()->SendRequest( + Device *device = (Device *)Parent(); + if (device->InitCheck() != B_OK) + return B_NO_INIT; + + return device->DefaultPipe()->SendRequest( USB_REQTYPE_STANDARD | USB_REQTYPE_ENDPOINT_IN, USB_REQUEST_GET_STATUS, 0,