From b83cf0c7f14a05a4ba9fef5aa0f95cdb75bc9b28 Mon Sep 17 00:00:00 2001 From: Kamen Kirov Date: Wed, 13 Feb 2019 14:20:35 +0200 Subject: [PATCH] Fix incorrect parsing of UVC interface descriptor Every USB device that has CS_INTERFACE descriptor was incorrectly assumed to be an UAC device, without checking the device class. This led to incorrect parsing of UVC devices, which also have CS_INTERFACE type descriptors. For some devices the parsing worked by coincidence, for others it lead to incorrect device data (wrong vid, pid, etc). This change parses every CS_INTERFACE descriptor that does not belong to an UAC device as type 'Unknown'. Test: Connect a UVC camera, observe logcat. Before this change, there were lots of parsing errors in logcat, now the device is added cleanly. Bug: 124374863 Change-Id: Ic076438625a733cffa9ae51ba803e353fd064ceb Signed-off-by: Kamen Kirov --- .../server/usb/descriptors/UsbDescriptorParser.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/services/usb/java/com/android/server/usb/descriptors/UsbDescriptorParser.java b/services/usb/java/com/android/server/usb/descriptors/UsbDescriptorParser.java index e61542824083d..6a3469c5fa249 100644 --- a/services/usb/java/com/android/server/usb/descriptors/UsbDescriptorParser.java +++ b/services/usb/java/com/android/server/usb/descriptors/UsbDescriptorParser.java @@ -177,11 +177,15 @@ public final class UsbDescriptorParser { * Audio Class Specific */ case UsbDescriptor.DESCRIPTORTYPE_AUDIO_INTERFACE: - descriptor = UsbACInterface.allocDescriptor(this, stream, length, type); + if (mDeviceDescriptor.getDevClass() == UsbDescriptor.CLASSID_AUDIO) { + descriptor = UsbACInterface.allocDescriptor(this, stream, length, type); + } break; case UsbDescriptor.DESCRIPTORTYPE_AUDIO_ENDPOINT: - descriptor = UsbACEndpoint.allocDescriptor(this, length, type); + if (mDeviceDescriptor.getDevClass() == UsbDescriptor.CLASSID_AUDIO) { + descriptor = UsbACEndpoint.allocDescriptor(this, length, type); + } break; default: