From: Greg Kroah-Hartman Date: Mon, 18 Dec 2017 12:49:06 +0000 (+0100) Subject: 4.9-stable patches X-Git-Tag: v3.18.89~11 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1131d1c56f9df3d67b228d712062bf4aa8efb95c;p=thirdparty%2Fkernel%2Fstable-queue.git 4.9-stable patches added patches: usb-add-helper-to-extract-bits-12-11-of-wmaxpacketsize.patch --- diff --git a/queue-4.9/series b/queue-4.9/series index 4b04d105015..aea62b94804 100644 --- a/queue-4.9/series +++ b/queue-4.9/series @@ -7,6 +7,7 @@ tracing-allocate-mask_str-buffer-dynamically.patch usb-uas-and-storage-add-us_fl_broken_fua-for-another-jmicron-jms567-id.patch usb-core-prevent-malicious-bnuminterfaces-overflow.patch usbip-fix-stub_rx-get_pipe-to-validate-endpoint-number.patch +usb-add-helper-to-extract-bits-12-11-of-wmaxpacketsize.patch usbip-fix-stub_rx-harden-cmd_submit-path-to-handle-malicious-input.patch usbip-fix-stub_send_ret_submit-vulnerability-to-null-transfer_buffer.patch ceph-drop-negative-child-dentries-before-try-pruning-inode-s-alias.patch diff --git a/queue-4.9/usb-add-helper-to-extract-bits-12-11-of-wmaxpacketsize.patch b/queue-4.9/usb-add-helper-to-extract-bits-12-11-of-wmaxpacketsize.patch new file mode 100644 index 00000000000..2e4a91850f2 --- /dev/null +++ b/queue-4.9/usb-add-helper-to-extract-bits-12-11-of-wmaxpacketsize.patch @@ -0,0 +1,70 @@ +From 541b6fe63023f3059cf85d47ff2767a3e42a8e44 Mon Sep 17 00:00:00 2001 +From: Felipe Balbi +Date: Mon, 26 Sep 2016 10:51:18 +0300 +Subject: usb: add helper to extract bits 12:11 of wMaxPacketSize + +From: Felipe Balbi + +commit 541b6fe63023f3059cf85d47ff2767a3e42a8e44 upstream. + +According to USB Specification 2.0 table 9-4, +wMaxPacketSize is a bitfield. Endpoint's maxpacket +is laid out in bits 10:0. For high-speed, +high-bandwidth isochronous endpoints, bits 12:11 +contain a multiplier to tell us how many +transactions we want to try per uframe. + +This means that if we want an isochronous endpoint +to issue 3 transfers of 1024 bytes per uframe, +wMaxPacketSize should contain the value: + + 1024 | (2 << 11) + +or 5120 (0x1400). In order to make Host and +Peripheral controller drivers' life easier, we're +adding a helper which returns bits 12:11. Note that +no care is made WRT to checking endpoint type and +gadget's speed. That's left for drivers to handle. + +Signed-off-by: Felipe Balbi +Signed-off-by: Greg Kroah-Hartman + +--- + include/uapi/linux/usb/ch9.h | 19 +++++++++++++++++++ + 1 file changed, 19 insertions(+) + +--- a/include/uapi/linux/usb/ch9.h ++++ b/include/uapi/linux/usb/ch9.h +@@ -423,6 +423,11 @@ struct usb_endpoint_descriptor { + #define USB_ENDPOINT_XFER_INT 3 + #define USB_ENDPOINT_MAX_ADJUSTABLE 0x80 + ++#define USB_EP_MAXP_MULT_SHIFT 11 ++#define USB_EP_MAXP_MULT_MASK (3 << USB_EP_MAXP_MULT_SHIFT) ++#define USB_EP_MAXP_MULT(m) \ ++ (((m) & USB_EP_MAXP_MULT_MASK) >> USB_EP_MAXP_MULT_SHIFT) ++ + /* The USB 3.0 spec redefines bits 5:4 of bmAttributes as interrupt ep type. */ + #define USB_ENDPOINT_INTRTYPE 0x30 + #define USB_ENDPOINT_INTR_PERIODIC (0 << 4) +@@ -630,6 +635,20 @@ static inline int usb_endpoint_maxp(cons + return __le16_to_cpu(epd->wMaxPacketSize); + } + ++/** ++ * usb_endpoint_maxp_mult - get endpoint's transactional opportunities ++ * @epd: endpoint to be checked ++ * ++ * Return @epd's wMaxPacketSize[12:11] + 1 ++ */ ++static inline int ++usb_endpoint_maxp_mult(const struct usb_endpoint_descriptor *epd) ++{ ++ int maxp = __le16_to_cpu(epd->wMaxPacketSize); ++ ++ return USB_EP_MAXP_MULT(maxp) + 1; ++} ++ + static inline int usb_endpoint_interrupt_type( + const struct usb_endpoint_descriptor *epd) + {