From f806a3c303028014eec43894386fbfb117667684 Mon Sep 17 00:00:00 2001 From: Josh Gao Date: Fri, 18 Aug 2017 18:25:44 -0700 Subject: [PATCH] fastboot: gracefully handle failure to open a USB device on OS X. High Sierra restricts opening some USB devices (e.g. the touchbar) to processes that have specific entitlements. Ignore devices that we can't open. Bug: http://b/64292422 Test: manual Change-Id: I6074b53a365b8d936610bafea60244f8bba1a33f --- fastboot/usb_osx.cpp | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/fastboot/usb_osx.cpp b/fastboot/usb_osx.cpp index 9069baa69..e95b04936 100644 --- a/fastboot/usb_osx.cpp +++ b/fastboot/usb_osx.cpp @@ -93,12 +93,9 @@ static int try_interfaces(IOUSBDeviceInterface182 **dev, usb_handle *handle) { SInt32 score; UInt8 interfaceNumEndpoints; - // Placing the constant KIOUSBFindInterfaceDontCare into the following - // fields of the IOUSBFindInterfaceRequest structure will allow us to - // find all of the interfaces - request.bInterfaceClass = kIOUSBFindInterfaceDontCare; - request.bInterfaceSubClass = kIOUSBFindInterfaceDontCare; - request.bInterfaceProtocol = kIOUSBFindInterfaceDontCare; + request.bInterfaceClass = 0xff; + request.bInterfaceSubClass = 0x42; + request.bInterfaceProtocol = 0x03; request.bAlternateSetting = kIOUSBFindInterfaceDontCare; // Get an iterator for the interfaces on the device @@ -282,7 +279,6 @@ static int try_device(io_service_t device, usb_handle *handle) { &plugin, &score); if ((kr != 0) || (plugin == NULL)) { - ERR("Unable to create a plug-in (%08x)\n", kr); goto error; } @@ -436,8 +432,7 @@ static int init_usb(ifc_match_func callback, std::unique_ptr* handle if (try_device(device, &h) != 0) { IOObjectRelease(device); - ret = -1; - break; + continue; } if (h.success) {