From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
stable@vger.kernel.org,
Masakazu Mokuno <masakazu.mokuno@gmail.com>
Subject: [PATCH 4.4 45/49] USB: core: Add type-specific length check of BOS descriptors
Date: Thu, 7 Dec 2017 14:07:39 +0100 [thread overview]
Message-ID: <20171207124710.070345096@linuxfoundation.org> (raw)
In-Reply-To: <20171207124703.742654162@linuxfoundation.org>
4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Masakazu Mokuno <masakazu.mokuno@gmail.com>
commit 81cf4a45360f70528f1f64ba018d61cb5767249a upstream.
As most of BOS descriptors are longer in length than their header
'struct usb_dev_cap_header', comparing solely with it is not sufficient
to avoid out-of-bounds access to BOS descriptors.
This patch adds descriptor type specific length check in
usb_get_bos_descriptor() to fix the issue.
Signed-off-by: Masakazu Mokuno <masakazu.mokuno@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/usb/core/config.c | 28 ++++++++++++++++++++++++----
include/uapi/linux/usb/ch9.h | 3 +++
2 files changed, 27 insertions(+), 4 deletions(-)
--- a/drivers/usb/core/config.c
+++ b/drivers/usb/core/config.c
@@ -871,14 +871,25 @@ void usb_release_bos_descriptor(struct u
}
}
+static const __u8 bos_desc_len[256] = {
+ [USB_CAP_TYPE_WIRELESS_USB] = USB_DT_USB_WIRELESS_CAP_SIZE,
+ [USB_CAP_TYPE_EXT] = USB_DT_USB_EXT_CAP_SIZE,
+ [USB_SS_CAP_TYPE] = USB_DT_USB_SS_CAP_SIZE,
+ [USB_SSP_CAP_TYPE] = USB_DT_USB_SSP_CAP_SIZE(1),
+ [CONTAINER_ID_TYPE] = USB_DT_USB_SS_CONTN_ID_SIZE,
+ [USB_PTM_CAP_TYPE] = USB_DT_USB_PTM_ID_SIZE,
+};
+
/* Get BOS descriptor set */
int usb_get_bos_descriptor(struct usb_device *dev)
{
struct device *ddev = &dev->dev;
struct usb_bos_descriptor *bos;
struct usb_dev_cap_header *cap;
+ struct usb_ssp_cap_descriptor *ssp_cap;
unsigned char *buffer;
- int length, total_len, num, i;
+ int length, total_len, num, i, ssac;
+ __u8 cap_type;
int ret;
bos = kzalloc(sizeof(struct usb_bos_descriptor), GFP_KERNEL);
@@ -931,7 +942,13 @@ int usb_get_bos_descriptor(struct usb_de
dev->bos->desc->bNumDeviceCaps = i;
break;
}
+ cap_type = cap->bDevCapabilityType;
length = cap->bLength;
+ if (bos_desc_len[cap_type] && length < bos_desc_len[cap_type]) {
+ dev->bos->desc->bNumDeviceCaps = i;
+ break;
+ }
+
total_len -= length;
if (cap->bDescriptorType != USB_DT_DEVICE_CAPABILITY) {
@@ -939,7 +956,7 @@ int usb_get_bos_descriptor(struct usb_de
continue;
}
- switch (cap->bDevCapabilityType) {
+ switch (cap_type) {
case USB_CAP_TYPE_WIRELESS_USB:
/* Wireless USB cap descriptor is handled by wusb */
break;
@@ -952,8 +969,11 @@ int usb_get_bos_descriptor(struct usb_de
(struct usb_ss_cap_descriptor *)buffer;
break;
case USB_SSP_CAP_TYPE:
- dev->bos->ssp_cap =
- (struct usb_ssp_cap_descriptor *)buffer;
+ ssp_cap = (struct usb_ssp_cap_descriptor *)buffer;
+ ssac = (le32_to_cpu(ssp_cap->bmAttributes) &
+ USB_SSP_SUBLINK_SPEED_ATTRIBS) + 1;
+ if (length >= USB_DT_USB_SSP_CAP_SIZE(ssac))
+ dev->bos->ssp_cap = ssp_cap;
break;
case CONTAINER_ID_TYPE:
dev->bos->ss_id =
--- a/include/uapi/linux/usb/ch9.h
+++ b/include/uapi/linux/usb/ch9.h
@@ -812,6 +812,8 @@ struct usb_wireless_cap_descriptor { /*
__u8 bReserved;
} __attribute__((packed));
+#define USB_DT_USB_WIRELESS_CAP_SIZE 11
+
/* USB 2.0 Extension descriptor */
#define USB_CAP_TYPE_EXT 2
@@ -1007,6 +1009,7 @@ enum usb3_link_state {
USB3_LPM_U3
};
+#define USB_DT_USB_PTM_ID_SIZE 3
/*
* A U1 timeout of 0x0 means the parent hub will reject any transitions to U1.
* 0xff means the parent hub will accept transitions to U1, but will not
next prev parent reply other threads:[~2017-12-07 13:07 UTC|newest]
Thread overview: 71+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-12-07 13:06 [PATCH 4.4 00/49] 4.4.105-stable review Greg Kroah-Hartman
2017-12-07 13:06 ` [PATCH 4.4 01/49] bcache: only permit to recovery read error when cache device is clean Greg Kroah-Hartman
2017-12-07 13:06 ` [PATCH 4.4 02/49] bcache: recover data from backing when data " Greg Kroah-Hartman
2017-12-07 13:06 ` [PATCH 4.4 03/49] uas: Always apply US_FL_NO_ATA_1X quirk to Seagate devices Greg Kroah-Hartman
2017-12-07 13:06 ` [PATCH 4.4 04/49] usb: quirks: Add no-lpm quirk for KY-688 USB 3.1 Type-C Hub Greg Kroah-Hartman
2017-12-07 13:06 ` [PATCH 4.4 05/49] serial: 8250_pci: Add Amazon PCI serial device ID Greg Kroah-Hartman
2017-12-07 13:07 ` [PATCH 4.4 06/49] s390/runtime instrumentation: simplify task exit handling Greg Kroah-Hartman
2017-12-07 13:07 ` [PATCH 4.4 07/49] USB: serial: option: add Quectel BG96 id Greg Kroah-Hartman
2017-12-07 13:07 ` [PATCH 4.4 08/49] ima: fix hash algorithm initialization Greg Kroah-Hartman
2017-12-07 13:07 ` [PATCH 4.4 09/49] s390/pci: do not require AIS facility Greg Kroah-Hartman
2017-12-07 13:07 ` [PATCH 4.4 10/49] selftests/x86/ldt_get: Add a few additional tests for limits Greg Kroah-Hartman
2017-12-07 13:07 ` [PATCH 4.4 11/49] serial: 8250_fintek: Fix rs485 disablement on invalid ioctl() Greg Kroah-Hartman
2017-12-07 13:07 ` [PATCH 4.4 12/49] spi: sh-msiof: Fix DMA transfer size check Greg Kroah-Hartman
2017-12-07 13:07 ` [PATCH 4.4 13/49] usb: dwc2: Fix UDC state tracking Greg Kroah-Hartman
2017-12-08 3:37 ` Ben Hutchings
2017-12-09 17:12 ` Greg Kroah-Hartman
2017-12-12 0:27 ` alexander.levin
2017-12-07 13:07 ` [PATCH 4.4 14/49] usb: dwc2: Error out of dwc2_hsotg_ep_disable() if were in host mode Greg Kroah-Hartman
2017-12-07 13:07 ` [PATCH 4.4 15/49] usb: phy: tahvo: fix error handling in tahvo_usb_probe() Greg Kroah-Hartman
2017-12-07 13:07 ` [PATCH 4.4 16/49] serial: 8250: Preserve DLD[7:4] for PORT_XR17V35X Greg Kroah-Hartman
2017-12-07 13:07 ` [PATCH 4.4 17/49] x86/entry: Use SYSCALL_DEFINE() macros for sys_modify_ldt() Greg Kroah-Hartman
2017-12-07 13:07 ` [PATCH 4.4 18/49] EDAC, sb_edac: Fix missing break in switch Greg Kroah-Hartman
2017-12-07 13:07 ` [PATCH 4.4 19/49] sysrq : fix Show Regs call trace on ARM Greg Kroah-Hartman
2017-12-07 13:07 ` [PATCH 4.4 20/49] usbip: tools: Install all headers needed for libusbip development Greg Kroah-Hartman
2017-12-08 3:56 ` Ben Hutchings
2017-12-09 6:16 ` alexander.levin
2017-12-09 7:41 ` Greg Kroah-Hartman
2017-12-12 0:13 ` alexander.levin
2017-12-12 7:22 ` Greg Kroah-Hartman
2017-12-09 17:06 ` Greg Kroah-Hartman
2017-12-07 13:07 ` [PATCH 4.4 21/49] perf test attr: Fix ignored test case result Greg Kroah-Hartman
2017-12-07 13:07 ` [PATCH 4.4 22/49] kprobes/x86: Disable preemption in ftrace-based jprobes Greg Kroah-Hartman
2017-12-07 13:07 ` [PATCH 4.4 23/49] net: systemport: Utilize skb_put_padto() Greg Kroah-Hartman
2017-12-07 13:07 ` [PATCH 4.4 24/49] net: systemport: Pad packet before inserting TSB Greg Kroah-Hartman
2017-12-07 13:07 ` [PATCH 4.4 25/49] ARM: OMAP1: DMA: Correct the number of logical channels Greg Kroah-Hartman
2017-12-07 13:07 ` [PATCH 4.4 26/49] vti6: fix device register to report IFLA_INFO_KIND Greg Kroah-Hartman
2017-12-07 13:07 ` [PATCH 4.4 27/49] net/appletalk: Fix kernel memory disclosure Greg Kroah-Hartman
2017-12-07 13:07 ` [PATCH 4.4 28/49] ravb: Remove Rx overflow log messages Greg Kroah-Hartman
2017-12-07 13:07 ` [PATCH 4.4 29/49] nfs: Dont take a reference on fl->fl_file for LOCK operation Greg Kroah-Hartman
2017-12-08 4:18 ` Ben Hutchings
2017-12-09 17:01 ` Greg Kroah-Hartman
2017-12-07 13:07 ` [PATCH 4.4 30/49] KVM: arm/arm64: Fix occasional warning from the timer work function Greg Kroah-Hartman
2017-12-07 13:07 ` [PATCH 4.4 31/49] NFSv4: Fix client recovery when server reboots multiple times Greg Kroah-Hartman
2017-12-07 13:07 ` [PATCH 4.4 32/49] drm/exynos/decon5433: set STANDALONE_UPDATE_F on output enablement Greg Kroah-Hartman
2017-12-07 13:07 ` [PATCH 4.4 33/49] net: sctp: fix array overrun read on sctp_timer_tbl Greg Kroah-Hartman
2017-12-08 4:34 ` Ben Hutchings
2017-12-09 17:02 ` Greg Kroah-Hartman
2017-12-07 13:07 ` [PATCH 4.4 34/49] tipc: fix cleanup at module unload Greg Kroah-Hartman
2017-12-07 13:07 ` [PATCH 4.4 35/49] dmaengine: pl330: fix double lock Greg Kroah-Hartman
2017-12-07 13:07 ` [PATCH 4.4 36/49] tcp: correct memory barrier usage in tcp_check_space() Greg Kroah-Hartman
2017-12-07 13:07 ` [PATCH 4.4 37/49] mm: avoid returning VM_FAULT_RETRY from ->page_mkwrite handlers Greg Kroah-Hartman
2017-12-07 13:07 ` [PATCH 4.4 38/49] xen-netfront: Improve error handling during initialization Greg Kroah-Hartman
2017-12-08 5:10 ` Ben Hutchings
2017-12-09 17:04 ` Greg Kroah-Hartman
2017-12-07 13:07 ` [PATCH 4.4 39/49] net: fec: fix multicast filtering hardware setup Greg Kroah-Hartman
2017-12-07 13:07 ` [PATCH 4.4 40/49] Revert "ocfs2: should wait dio before inode lock in ocfs2_setattr()" Greg Kroah-Hartman
2017-12-07 13:07 ` [PATCH 4.4 41/49] usb: hub: Cycle HUB power when initialization fails Greg Kroah-Hartman
2017-12-07 13:07 ` [PATCH 4.4 42/49] usb: xhci: fix panic in xhci_free_virt_devices_depth_first Greg Kroah-Hartman
2017-12-07 13:07 ` [PATCH 4.4 43/49] usb: Add USB 3.1 Precision time measurement capability descriptor support Greg Kroah-Hartman
2017-12-07 13:07 ` [PATCH 4.4 44/49] usb: ch9: Add size macro for SSP dev cap descriptor Greg Kroah-Hartman
2017-12-07 13:07 ` Greg Kroah-Hartman [this message]
2017-12-07 13:07 ` [PATCH 4.4 46/49] USB: Increase usbfs transfer limit Greg Kroah-Hartman
2017-12-07 13:07 ` [PATCH 4.4 47/49] USB: devio: Prevent integer overflow in proc_do_submiturb() Greg Kroah-Hartman
2017-12-07 13:07 ` [PATCH 4.4 48/49] USB: usbfs: Filter flags passed in from user space Greg Kroah-Hartman
2017-12-07 13:07 ` [PATCH 4.4 49/49] usb: host: fix incorrect updating of offset Greg Kroah-Hartman
2017-12-07 15:23 ` [PATCH 4.4 00/49] 4.4.105-stable review Nathan Chancellor
2017-12-07 20:06 ` Greg Kroah-Hartman
2017-12-07 20:54 ` Guenter Roeck
2017-12-08 0:06 ` Shuah Khan
2017-12-08 5:36 ` Naresh Kamboju
[not found] ` <5a299569.3bb0df0a.2b900.5bf0@mx.google.com>
[not found] ` <7hr2s5kn0w.fsf@baylibre.com>
2017-12-09 17:05 ` Greg Kroah-Hartman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20171207124710.070345096@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=masakazu.mokuno@gmail.com \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).