| From 03bd045b36aeca774312ce45909ea1d0508f8601 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 24 Mar 2021 15:11:14 +0100 |
| Subject: fotg210-udc: Don't DMA more than the buffer can take |
| |
| From: Fabian Vogt <fabian@ritter-vogt.de> |
| |
| [ Upstream commit 3e7c2510bdfe89a9ec223dd7acd6bfc8bb1cbeb6 ] |
| |
| Before this, it wrote as much as available into the buffer, even if it |
| didn't fit. |
| |
| Fixes: b84a8dee23fd ("usb: gadget: add Faraday fotg210_udc driver") |
| Signed-off-by: Fabian Vogt <fabian@ritter-vogt.de> |
| Link: https://lore.kernel.org/r/20210324141115.9384-7-fabian@ritter-vogt.de |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/usb/gadget/udc/fotg210-udc.c | 5 +++-- |
| 1 file changed, 3 insertions(+), 2 deletions(-) |
| |
| diff --git a/drivers/usb/gadget/udc/fotg210-udc.c b/drivers/usb/gadget/udc/fotg210-udc.c |
| index d25cf5d44121..315d0e485d32 100644 |
| --- a/drivers/usb/gadget/udc/fotg210-udc.c |
| +++ b/drivers/usb/gadget/udc/fotg210-udc.c |
| @@ -340,8 +340,9 @@ static void fotg210_start_dma(struct fotg210_ep *ep, |
| } else { |
| buffer = req->req.buf + req->req.actual; |
| length = ioread32(ep->fotg210->reg + |
| - FOTG210_FIBCR(ep->epnum - 1)); |
| - length &= FIBCR_BCFX; |
| + FOTG210_FIBCR(ep->epnum - 1)) & FIBCR_BCFX; |
| + if (length > req->req.length - req->req.actual) |
| + length = req->req.length - req->req.actual; |
| } |
| } else { |
| buffer = req->req.buf + req->req.actual; |
| -- |
| 2.30.2 |
| |