mirror of
git://slackware.nl/current.git
synced 2024-12-28 09:59:53 +01:00
96ec6f0e63
a/kernel-generic-5.10.31-x86_64-1.txz: Upgraded. a/kernel-huge-5.10.31-x86_64-1.txz: Upgraded. a/kernel-modules-5.10.31-x86_64-1.txz: Upgraded. a/mkinitrd-1.4.11-x86_64-23.txz: Rebuilt. Get rid of patch created /sbin/mkinitrd.orig. Thanks to burdi01. d/kernel-headers-5.10.31-x86-1.txz: Upgraded. k/kernel-source-5.10.31-noarch-1.txz: Upgraded. l/libusb-1.0.24-x86_64-4.txz: Rebuilt. Fix parsing of descriptors for multi-configuration devices. Thanks to acbff0. n/network-scripts-15.0-noarch-16.txz: Rebuilt. netconfig: fix typo. Thanks to Gerard Lally. isolinux/initrd.img: Rebuilt. kernels/*: Upgraded. testing/packages/linux-5.11.x/kernel-generic-5.11.15-x86_64-1.txz: Upgraded. testing/packages/linux-5.11.x/kernel-headers-5.11.15-x86-1.txz: Upgraded. testing/packages/linux-5.11.x/kernel-huge-5.11.15-x86_64-1.txz: Upgraded. testing/packages/linux-5.11.x/kernel-modules-5.11.15-x86_64-1.txz: Upgraded. testing/packages/linux-5.11.x/kernel-source-5.11.15-noarch-1.txz: Upgraded. usb-and-pxe-installers/usbboot.img: Rebuilt.
65 lines
2.3 KiB
Diff
65 lines
2.3 KiB
Diff
From f6d2cb561402c3b6d3627c0eb89e009b503d9067 Mon Sep 17 00:00:00 2001
|
|
From: Chris Dickens <christopher.a.dickens@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.dickens@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
|