diff options
| author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2018-12-10 04:19:08 -0500 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2018-12-10 04:19:08 -0500 |
| commit | b53bde6686fb6952f560e82c5b6c529966d205a4 (patch) | |
| tree | 7b456d091455d26b2d4be128abba1c115dfece35 /drivers/usb/core | |
| parent | e67ebf1b3815b2d1fc505dba182761c0be6c179d (diff) | |
| parent | 40e020c129cfc991e8ab4736d2665351ffd1468d (diff) | |
Merge 4.20-rc6 into usb-next
We want the USB fixes in here as well.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/core')
| -rw-r--r-- | drivers/usb/core/hub.c | 5 | ||||
| -rw-r--r-- | drivers/usb/core/quirks.c | 4 | ||||
| -rw-r--r-- | drivers/usb/core/usb.c | 6 |
3 files changed, 10 insertions, 5 deletions
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index 009f92800e03..1d1e61e980f3 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c | |||
| @@ -2261,7 +2261,7 @@ static int usb_enumerate_device_otg(struct usb_device *udev) | |||
| 2261 | /* descriptor may appear anywhere in config */ | 2261 | /* descriptor may appear anywhere in config */ |
| 2262 | err = __usb_get_extra_descriptor(udev->rawdescriptors[0], | 2262 | err = __usb_get_extra_descriptor(udev->rawdescriptors[0], |
| 2263 | le16_to_cpu(udev->config[0].desc.wTotalLength), | 2263 | le16_to_cpu(udev->config[0].desc.wTotalLength), |
| 2264 | USB_DT_OTG, (void **) &desc); | 2264 | USB_DT_OTG, (void **) &desc, sizeof(*desc)); |
| 2265 | if (err || !(desc->bmAttributes & USB_OTG_HNP)) | 2265 | if (err || !(desc->bmAttributes & USB_OTG_HNP)) |
| 2266 | return 0; | 2266 | return 0; |
| 2267 | 2267 | ||
| @@ -5173,7 +5173,7 @@ static void hub_port_connect_change(struct usb_hub *hub, int port1, | |||
| 5173 | /* Handle notifying userspace about hub over-current events */ | 5173 | /* Handle notifying userspace about hub over-current events */ |
| 5174 | static void port_over_current_notify(struct usb_port *port_dev) | 5174 | static void port_over_current_notify(struct usb_port *port_dev) |
| 5175 | { | 5175 | { |
| 5176 | static char *envp[] = { NULL, NULL, NULL }; | 5176 | char *envp[3]; |
| 5177 | struct device *hub_dev; | 5177 | struct device *hub_dev; |
| 5178 | char *port_dev_path; | 5178 | char *port_dev_path; |
| 5179 | 5179 | ||
| @@ -5197,6 +5197,7 @@ static void port_over_current_notify(struct usb_port *port_dev) | |||
| 5197 | if (!envp[1]) | 5197 | if (!envp[1]) |
| 5198 | goto exit; | 5198 | goto exit; |
| 5199 | 5199 | ||
| 5200 | envp[2] = NULL; | ||
| 5200 | kobject_uevent_env(&hub_dev->kobj, KOBJ_CHANGE, envp); | 5201 | kobject_uevent_env(&hub_dev->kobj, KOBJ_CHANGE, envp); |
| 5201 | 5202 | ||
| 5202 | kfree(envp[1]); | 5203 | kfree(envp[1]); |
diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c index 0690fcff0ea2..514c5214ddb2 100644 --- a/drivers/usb/core/quirks.c +++ b/drivers/usb/core/quirks.c | |||
| @@ -333,6 +333,10 @@ static const struct usb_device_id usb_quirk_list[] = { | |||
| 333 | /* Midiman M-Audio Keystation 88es */ | 333 | /* Midiman M-Audio Keystation 88es */ |
| 334 | { USB_DEVICE(0x0763, 0x0192), .driver_info = USB_QUIRK_RESET_RESUME }, | 334 | { USB_DEVICE(0x0763, 0x0192), .driver_info = USB_QUIRK_RESET_RESUME }, |
| 335 | 335 | ||
| 336 | /* SanDisk Ultra Fit and Ultra Flair */ | ||
| 337 | { USB_DEVICE(0x0781, 0x5583), .driver_info = USB_QUIRK_NO_LPM }, | ||
| 338 | { USB_DEVICE(0x0781, 0x5591), .driver_info = USB_QUIRK_NO_LPM }, | ||
| 339 | |||
| 336 | /* M-Systems Flash Disk Pioneers */ | 340 | /* M-Systems Flash Disk Pioneers */ |
| 337 | { USB_DEVICE(0x08ec, 0x1000), .driver_info = USB_QUIRK_RESET_RESUME }, | 341 | { USB_DEVICE(0x08ec, 0x1000), .driver_info = USB_QUIRK_RESET_RESUME }, |
| 338 | 342 | ||
diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c index 79d8bd7a612e..4ebfbd737905 100644 --- a/drivers/usb/core/usb.c +++ b/drivers/usb/core/usb.c | |||
| @@ -832,14 +832,14 @@ EXPORT_SYMBOL_GPL(usb_get_current_frame_number); | |||
| 832 | */ | 832 | */ |
| 833 | 833 | ||
| 834 | int __usb_get_extra_descriptor(char *buffer, unsigned size, | 834 | int __usb_get_extra_descriptor(char *buffer, unsigned size, |
| 835 | unsigned char type, void **ptr) | 835 | unsigned char type, void **ptr, size_t minsize) |
| 836 | { | 836 | { |
| 837 | struct usb_descriptor_header *header; | 837 | struct usb_descriptor_header *header; |
| 838 | 838 | ||
| 839 | while (size >= sizeof(struct usb_descriptor_header)) { | 839 | while (size >= sizeof(struct usb_descriptor_header)) { |
| 840 | header = (struct usb_descriptor_header *)buffer; | 840 | header = (struct usb_descriptor_header *)buffer; |
| 841 | 841 | ||
| 842 | if (header->bLength < 2) { | 842 | if (header->bLength < 2 || header->bLength > size) { |
| 843 | printk(KERN_ERR | 843 | printk(KERN_ERR |
| 844 | "%s: bogus descriptor, type %d length %d\n", | 844 | "%s: bogus descriptor, type %d length %d\n", |
| 845 | usbcore_name, | 845 | usbcore_name, |
| @@ -848,7 +848,7 @@ int __usb_get_extra_descriptor(char *buffer, unsigned size, | |||
| 848 | return -1; | 848 | return -1; |
| 849 | } | 849 | } |
| 850 | 850 | ||
| 851 | if (header->bDescriptorType == type) { | 851 | if (header->bDescriptorType == type && header->bLength >= minsize) { |
| 852 | *ptr = header; | 852 | *ptr = header; |
| 853 | return 0; | 853 | return 0; |
| 854 | } | 854 | } |
