USB: xhci: Fail gracefully if there's no SS ep companion descriptor.
authorSarah Sharp <sarah.a.sharp@linux.intel.com>
Mon, 27 Jul 2009 19:04:38 +0000 (12:04 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 28 Jul 2009 21:31:12 +0000 (14:31 -0700)
This is a work around for a bug in the SuperSpeed Endpoint Companion Descriptor
parsing code.  It fails in some corner cases, which means ep->ss_ep_comp may be
NULL.

Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/host/xhci-mem.c

index 075e103..41aca00 100644 (file)
@@ -496,7 +496,12 @@ int xhci_endpoint_init(struct xhci_hcd *xhci,
                max_packet = ep->desc.wMaxPacketSize;
                ep_ctx->ep_info2 |= MAX_PACKET(max_packet);
                /* dig out max burst from ep companion desc */
-               max_packet = ep->ss_ep_comp->desc.bMaxBurst;
+               if (!ep->ss_ep_comp) {
+                       xhci_warn(xhci, "WARN no SS endpoint companion descriptor.\n");
+                       max_packet = 0;
+               } else {
+                       max_packet = ep->ss_ep_comp->desc.bMaxBurst;
+               }
                ep_ctx->ep_info2 |= MAX_BURST(max_packet);
                break;
        case USB_SPEED_HIGH: