From 4a21aed10fd4db3e2d0bc730bca46a37730c8c47045d4b4f0a193db857db94aa Mon Sep 17 00:00:00 2001 From: Martin Hauke Date: Sun, 17 Jan 2021 21:58:42 +0000 Subject: [PATCH] Accepting request 863874 from home:DarkWav Add 0001-fix-descriptor-parsing.patch to fix detection of some devices. Some devices, including my galaxy s7 stopped being detected after the libusb 1.0.24 update. After applying this patch from upstream it works fine again. If you have any further suggestions for the patch let me know. OBS-URL: https://build.opensuse.org/request/show/863874 OBS-URL: https://build.opensuse.org/package/show/hardware/libusb-1_0?expand=0&rev=59 --- 0001-fix-descriptor-parsing.patch | 44 +++++++++++++++++++++++++++++++ libusb-1_0.changes | 5 ++++ libusb-1_0.spec | 6 +++-- 3 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 0001-fix-descriptor-parsing.patch diff --git a/0001-fix-descriptor-parsing.patch b/0001-fix-descriptor-parsing.patch new file mode 100644 index 0000000..91e1d88 --- /dev/null +++ b/0001-fix-descriptor-parsing.patch @@ -0,0 +1,44 @@ +From f6d2cb561402c3b6d3627c0eb89e009b503d9067 Sun 17 01 11:38:45 2021 +From: Simon Vogl +Date: Sun, 17 Jan 2021 11:38:45 UTC +Subject: [PATCH] Fix USB Device enumeration + +This patch fixes a regression introduced in libusb 1.0.24 that prevents certain devices like smartphones from being detected. + +diff --git a/libusb/os/linux_usbfs.c b/libusb/os/linux_usbfs.c +index fb2ed53a..4d2dc8d6 100644 +--- a/libusb/os/linux_usbfs.c ++++ b/libusb/os/linux_usbfs.c +@@ -641,7 +641,12 @@ static int seek_to_next_config(struct libusb_context *ctx, + uint8_t *buffer, size_t len) + { + struct usbi_descriptor_header *header; +- int offset = 0; ++ int offset; ++ ++ /* Start seeking past the config descriptor */ ++ offset = LIBUSB_DT_CONFIG_SIZE; ++ buffer += LIBUSB_DT_CONFIG_SIZE; ++ len -= LIBUSB_DT_CONFIG_SIZE; + + while (len > 0) { + if (len < 2) { +@@ -718,7 +723,7 @@ static int parse_config_descriptors(struct libusb_device *dev) + } + + if (priv->sysfs_dir) { +- /* ++ /* + * In sysfs wTotalLength is ignored, instead the kernel returns a + * config descriptor with verified bLength fields, with descriptors + * with an invalid bLength removed. +@@ -727,8 +732,7 @@ static int parse_config_descriptors(struct libusb_device *dev) + int offset; + + if (num_configs > 1 && idx < num_configs - 1) { +- offset = seek_to_next_config(ctx, buffer + LIBUSB_DT_CONFIG_SIZE, +- remaining - LIBUSB_DT_CONFIG_SIZE); ++ offset = seek_to_next_config(ctx, buffer, remaining); + if (offset < 0) + return offset; + sysfs_config_len = (uint16_t)offset; diff --git a/libusb-1_0.changes b/libusb-1_0.changes index 1b6da79..f8ab810 100644 --- a/libusb-1_0.changes +++ b/libusb-1_0.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Sun Jan 17 11:38:45 UTC 2021 - Simon Vogl + +- Add 0001-fix-descriptor-parsing.patch to fix detection of some devices. + ------------------------------------------------------------------- Thu Dec 10 19:18:02 UTC 2020 - Martin Hauke diff --git a/libusb-1_0.spec b/libusb-1_0.spec index 6c85f0b..b72816b 100644 --- a/libusb-1_0.spec +++ b/libusb-1_0.spec @@ -1,7 +1,7 @@ # # spec file for package libusb-1_0 # -# Copyright (c) 2020 SUSE LLC +# Copyright (c) 2021 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -27,6 +27,8 @@ Group: System/Hardware URL: http://libusb.info/ Source: https://github.com/libusb/libusb/releases/download/v%{version}/libusb-%{version}.tar.bz2 Source1: baselibs.conf +# PATCH-FIX-UPSTREAM +Patch1: 0001-fix-descriptor-parsing.patch BuildRequires: dos2unix BuildRequires: pkgconfig BuildRequires: pkgconfig(libudev) @@ -51,7 +53,7 @@ Requires: libusb-1_0-0 = %{version} Libusb is a library that allows userspace access to USB devices. %prep -%setup -q -n %{_name}-%{version} +%autosetup -p1 -n %{_name}-%{version} dos2unix NEWS %build