From: Stefan Brüns Date: Tue, 22 Dec 2015 00:21:48 +0000 (+0100) Subject: usb: dwc2: avoid out of bounds access X-Git-Tag: v2016.01-rc4~10^2~2 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=5253aded464f99734698bffd33c662f1ac071fd0;p=u-boot usb: dwc2: avoid out of bounds access flush_dcache_range may access data after priv->aligned_buffer end if len > DWC2_DATA_BUF_SIZE. memcpy may access data after buffer end if done > 0 Signed-off-by: Stefan Brüns Acked-by: Marek Vasut Acked-by: Stephen Warren --- diff --git a/drivers/usb/host/dwc2.c b/drivers/usb/host/dwc2.c index 541c0f9687..5ef6debd9a 100644 --- a/drivers/usb/host/dwc2.c +++ b/drivers/usb/host/dwc2.c @@ -823,12 +823,13 @@ int chunk_msg(struct dwc2_priv *priv, struct usb_device *dev, (*pid << DWC2_HCTSIZ_PID_OFFSET), &hc_regs->hctsiz); - if (!in) { - memcpy(priv->aligned_buffer, (char *)buffer + done, len); + if (!in && xfer_len) { + memcpy(priv->aligned_buffer, (char *)buffer + done, + xfer_len); flush_dcache_range((unsigned long)priv->aligned_buffer, (unsigned long)((void *)priv->aligned_buffer + - roundup(len, ARCH_DMA_MINALIGN))); + roundup(xfer_len, ARCH_DMA_MINALIGN))); } writel(phys_to_bus((unsigned long)priv->aligned_buffer),