From: Jack Pham <jackp@codeaurora.org>
To: Alexey Khoroshilov <khoroshilov@ispras.ru>
Cc: Felipe Balbi <balbi@kernel.org>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org,
ldv-project@linuxtesting.org
Subject: Re: [PATCH] usb: gadget: pch_udc: add checks for dma mapping errors
Date: Wed, 23 Aug 2017 18:02:27 -0700 [thread overview]
Message-ID: <20170824010227.GC30841@usblab-sd-06.qualcomm.com> (raw)
In-Reply-To: <1503528428-16901-1-git-send-email-khoroshilov@ispras.ru>
On Thu, Aug 24, 2017 at 01:47:08AM +0300, Alexey Khoroshilov wrote:
> There are no checks for dma mapping errors in pch_udc.
> Tha patch adds the checks and error handling code.
> Compile tested only.
>
> Found by Linux Driver Verification project (linuxtesting.org).
>
> Signed-off-by: Alexey Khoroshilov <khoroshilov@ispras.ru>
> ---
> drivers/usb/gadget/udc/pch_udc.c | 15 +++++++++++++--
> 1 file changed, 13 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/usb/gadget/udc/pch_udc.c b/drivers/usb/gadget/udc/pch_udc.c
> index 84dcbcd756f0..a305f8392082 100644
> --- a/drivers/usb/gadget/udc/pch_udc.c
> +++ b/drivers/usb/gadget/udc/pch_udc.c
> @@ -1767,7 +1767,7 @@ static struct usb_request *pch_udc_alloc_request(struct usb_ep *usbep,
> req->req.dma = DMA_ADDR_INVALID;
> req->dma = DMA_ADDR_INVALID;
> INIT_LIST_HEAD(&req->queue);
> - if (!ep->dev->dma_addr)
> + if (ep->dev->dma_addr != DMA_ADDR_INVALID)
> return &req->req;
> /* ep0 in requests are allocated from data pool here */
> dma_desc = dma_pool_alloc(ep->dev->data_requests, gfp,
> @@ -1879,6 +1879,13 @@ static int pch_udc_pcd_queue(struct usb_ep *usbep, struct usb_request *usbreq,
> usbreq->length,
> DMA_FROM_DEVICE);
> }
> + if (dma_mapping_error(&dev->pdev->dev, req->dma)) {
> + req->dma = DMA_ADDR_INVALID;
> + retval = -ENOMEM;
> + if ((unsigned long)(usbreq->buf) & 0x03)
> + kfree(req->buf);
> + goto probe_end;
> + }
> req->dma_mapped = 1;
> }
> if (usbreq->length > 0) {
> @@ -2961,6 +2968,10 @@ static int init_dma_pools(struct pch_udc_dev *dev)
> dev->dma_addr = dma_map_single(&dev->pdev->dev, ep0out_buf,
> UDC_EP0OUT_BUFF_SIZE * 4,
> DMA_FROM_DEVICE);
> + if (dma_mapping_error(&dev->pdev->dev, dev->dma_addr)) {
> + dev->dma_addr = DMA_ADDR_INVALID;
> + return -ENOMEM;
> + }
Wouldn't this driver be better off using the
usb_gadget_{map,unmap}_request() functions provided by UDC core.c?
dma_mapping_error() is provided for free that way.
Jack
--
The Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project
next prev parent reply other threads:[~2017-08-24 1:02 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-23 22:47 [PATCH] usb: gadget: pch_udc: add checks for dma mapping errors Alexey Khoroshilov
2017-08-24 1:02 ` Jack Pham [this message]
2017-09-02 18:35 ` Alexey Khoroshilov
2017-09-20 11:53 ` Felipe Balbi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170824010227.GC30841@usblab-sd-06.qualcomm.com \
--to=jackp@codeaurora.org \
--cc=balbi@kernel.org \
--cc=gregkh@linuxfoundation.org \
--cc=khoroshilov@ispras.ru \
--cc=ldv-project@linuxtesting.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.