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
This commit is contained in:
Martin Hauke 2021-01-17 21:58:42 +00:00 committed by Git OBS Bridge
parent 8e72b70ee8
commit 4a21aed10f
3 changed files with 53 additions and 2 deletions

View File

@ -0,0 +1,44 @@
From f6d2cb561402c3b6d3627c0eb89e009b503d9067 Sun 17 01 11:38:45 2021
From: Simon Vogl <simon.vogl@gmx.net>
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;

View File

@ -1,3 +1,8 @@
-------------------------------------------------------------------
Sun Jan 17 11:38:45 UTC 2021 - Simon Vogl <simon.vogl@gmx.net>
- Add 0001-fix-descriptor-parsing.patch to fix detection of some devices.
-------------------------------------------------------------------
Thu Dec 10 19:18:02 UTC 2020 - Martin Hauke <mardnh@gmx.de>

View File

@ -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