usb: dwc_otg: show warning on actual buffer length larger than
authorlyz <lyz@rock-chips.com>
Thu, 12 Feb 2015 02:16:32 +0000 (10:16 +0800)
committerlyz <lyz@rock-chips.com>
Thu, 12 Feb 2015 02:54:51 +0000 (10:54 +0800)
transfer buffer length

In this case DWC_OTG controller will over-write memory space that
not belongs to this urb, it may cause kernel crash.

Signed-off-by: lyz <lyz@rock-chips.com>
drivers/usb/dwc_otg_310/dwc_otg_hcd_linux.c

index e9eb036db319349be3ec53a2ef1453bbe57f0581..24464797a2a6f51aaf297e10636045a69f4f56b6 100755 (executable)
@@ -285,6 +285,13 @@ static int _complete(dwc_otg_hcd_t *hcd, void *urb_handle,
                }
        }
 
+       WARN((urb->actual_length > urb->transfer_buffer_length &&
+             usb_pipein(urb->pipe)),
+             "DWC_OTG Transfer buffer length less than actual buffer length"
+             "actual_length %d , buffer_length %d urb->complete %pF\n",
+             urb->actual_length, urb->transfer_buffer_length,
+             urb->complete);
+
        if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS) {
                int i;