Dominique Leuenberger 2021-01-19 15:00:40 +00:00 committed by Git OBS Bridge
commit 92f41c992d
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