[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <xa1t37mu3l9i.fsf@mina86.com>
Date: Wed, 27 Jul 2016 21:59:21 +0200
From: Michal Nazarewicz <mina86@...a86.com>
To: "Felipe F. Tonello" <eu@...ipetonello.com>,
linux-usb@...r.kernel.org
Cc: linux-kernel@...r.kernel.org, Felipe Balbi <balbi@...nel.org>,
Baolin Wang <baolin.wang@...aro.org>,
Andrzej Pietrasiewicz <andrzej.p@...sung.com>
Subject: Re: [PATCH 2/9] usb: gadget: align buffer size when allocating for OUT endpoint
On Tue, Jul 26 2016, Felipe F. Tonello wrote:
> Using usb_ep_align() makes sure that the buffer size for OUT endpoints is
> always aligned with wMaxPacketSize (512 usually). This makes sure
> that no buffer has the wrong size, which can cause nasty bugs.
>
> Signed-off-by: Felipe F. Tonello <eu@...ipetonello.com>
> ---
> drivers/usb/gadget/u_f.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/drivers/usb/gadget/u_f.c b/drivers/usb/gadget/u_f.c
> index 4bc7eea8bfc8..d1933b0b76c3 100644
> --- a/drivers/usb/gadget/u_f.c
> +++ b/drivers/usb/gadget/u_f.c
> @@ -12,6 +12,7 @@
> */
>
> #include "u_f.h"
> +#include <linux/usb/ch9.h>
>
> struct usb_request *alloc_ep_req(struct usb_ep *ep, int len, int default_len)
> {
> @@ -20,6 +21,8 @@ struct usb_request *alloc_ep_req(struct usb_ep *ep, int len, int default_len)
> req = usb_ep_alloc_request(ep, GFP_ATOMIC);
> if (req) {
> req->length = len ?: default_len;
> + if (usb_endpoint_dir_out(ep->desc))
> + req->length = usb_ep_align(ep, req->length);
> req->buf = kmalloc(req->length, GFP_ATOMIC);
> if (!req->buf) {
> usb_ep_free_request(ep, req);
I’m a bit scared of this change.
Drivers which call alloc_ep_req and then ignore req->length using the
same length they passed to the function will silently drop data.
Drivers which do not ignore req->length may end up overwriting some
other buffer, e.g.:
some_buffer = kmalloc(length, GFP_KERNEL);
req = alloc_ep_req(ep, length, 0);
… later …
memcpy(some_buffer, req->buf, req->length);
--
Best regards
ミハウ “𝓶𝓲𝓷𝓪86” ナザレヴイツ
«If at first you don’t succeed, give up skydiving»
Powered by blists - more mailing lists