commit:     64634fb2c17c6dc37a6d174803f7183f898fbb00
Author:     Lars Wendler <polynomial-c <AT> gentoo <DOT> org>
AuthorDate: Mon Dec 14 02:13:01 2020 +0000
Commit:     Lars Wendler <polynomial-c <AT> gentoo <DOT> org>
CommitDate: Mon Dec 14 02:13:01 2020 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=64634fb2

dev-libs/libusb: Revbump to fix Apple and USV device detection

Closes: https://bugs.gentoo.org/759814
Package-Manager: Portage-3.0.12, Repoman-3.0.2
Signed-off-by: Lars Wendler <polynomial-c <AT> gentoo.org>

 ...libusb-1.0.24-multi_device_config_parsing.patch | 65 ++++++++++++++++++++++
 ...ibusb-1.0.24.ebuild => libusb-1.0.24-r1.ebuild} |  4 ++
 2 files changed, 69 insertions(+)

diff --git 
a/dev-libs/libusb/files/libusb-1.0.24-multi_device_config_parsing.patch 
b/dev-libs/libusb/files/libusb-1.0.24-multi_device_config_parsing.patch
new file mode 100644
index 00000000000..739d41c404a
--- /dev/null
+++ b/dev-libs/libusb/files/libusb-1.0.24-multi_device_config_parsing.patch
@@ -0,0 +1,65 @@
+From f6d2cb561402c3b6d3627c0eb89e009b503d9067 Mon Sep 17 00:00:00 2001
+From: Chris Dickens <christopher.a.dick...@gmail.com>
+Date: Sun, 13 Dec 2020 15:49:19 -0800
+Subject: [PATCH] linux_usbfs: Fix parsing of descriptors for
+ multi-configuration devices
+
+Commit e2be556bd2 ("linux_usbfs: Parse config descriptors during device
+initialization") introduced a regression for devices with multiple
+configurations. The logic that verifies the reported length of the
+configuration descriptors failed to count the length of the
+configuration descriptor itself and would truncate the actual length by
+9 bytes, leading to a parsing error for subsequent descriptors.
+
+Closes #825
+
+Signed-off-by: Chris Dickens <christopher.a.dick...@gmail.com>
+---
+ libusb/os/linux_usbfs.c | 12 ++++++++----
+ libusb/version_nano.h   |  2 +-
+ 2 files changed, 9 insertions(+), 5 deletions(-)
+
+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/version_nano.h b/libusb/version_nano.h
+index 61a0a700..578b0979 100644
+--- a/libusb/version_nano.h
++++ b/libusb/version_nano.h
+@@ -1 +1 @@
+-#define LIBUSB_NANO 11584
++#define LIBUSB_NANO 11586

diff --git a/dev-libs/libusb/libusb-1.0.24.ebuild 
b/dev-libs/libusb/libusb-1.0.24-r1.ebuild
similarity index 95%
rename from dev-libs/libusb/libusb-1.0.24.ebuild
rename to dev-libs/libusb/libusb-1.0.24-r1.ebuild
index 167ef4b659d..50c1cb3b454 100644
--- a/dev-libs/libusb/libusb-1.0.24.ebuild
+++ b/dev-libs/libusb/libusb-1.0.24-r1.ebuild
@@ -19,6 +19,10 @@ DEPEND="${RDEPEND}
        !udev? ( virtual/os-headers )"
 BDEPEND="doc? ( app-doc/doxygen )"
 
+PATCHES=(
+       "${FILESDIR}/${P}-multi_device_config_parsing.patch" #759814
+)
+
 multilib_src_configure() {
        local myeconfargs=(
                $(use_enable static-libs static)

Reply via email to