Received: by 10.213.65.68 with SMTP id h4csp742060imn; Fri, 6 Apr 2018 08:09:10 -0700 (PDT) X-Google-Smtp-Source: AIpwx4/XAkNXOtQlrQBLrpX+g2MrrVfi5lqZEerobwoWU55aWnCIwV1PM6QBvY51h4sYjy61byuF X-Received: by 10.167.130.2 with SMTP id k2mr16825773pfi.14.1523027350637; Fri, 06 Apr 2018 08:09:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1523027350; cv=none; d=google.com; s=arc-20160816; b=pAn5tcaN/n8/X6tCyDNLbf4cSB++jHyuOz3ofzIHbITTfEXOSWZL08Mb0zA/PredeP HEvbPCEQohXBUTeZOpn8eY77AhblqCigRZhpXyR1R7FuZC6kd7n96mBK5fIDMSNqmTrn Csz2znL0MnbMpyH0vCsMEUfaKbI4b5cndoBJvOBE0U48pEeE6f2MfAABi9ufxlfIKb2A KxKcyEhUS1l94H+zkPnzaw9QPSrGPaGvODSQ3iBQhYSBdWJw4sahloSc4ROK6nUl4iAa ynNk9rZOkm0RfZyD6CRDmPKai9JOq09MoWRKIjcJl5FhMQXKJ7uk+tZXs6e41BxZYpU6 ajIw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=4+3DSx9HahILDVAV0v8NccW4ujY7rQz6J/0d0pqauoA=; b=LwkwJaLLFvAuSYTx2cWZnWsnUdSY+BlFUjudknXIefoWBBcobbPNVzkqTELBoh1Hey EiIfHh4FJZFihj9oJeS3IRVXLqT8afHyeu6Gm+WTrVx7gfcKjaflTmQKrYrFXOqSVf2m bj0H1KydZyXF72tgQX2/nHVyRq+8p7baBWeL6z+fYCRrQgS05i+r513ppqLGHqcyGrXE JMT06ygdhR/9jifDgqc0TeM35lS+K0JK12SGgAdhFcpctK8VjDic4O6nGkzZW8Km+oDo Ll4xPqMuX5H8lnKxsYjv9Io6Viq3B9kL+wrWGLfDWdal2V+1Q2HN28NIixtiAY+WdPXe RV2A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id r6-v6si8161589pls.527.2018.04.06.08.08.56; Fri, 06 Apr 2018 08:09:10 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754708AbeDFN3q (ORCPT + 99 others); Fri, 6 Apr 2018 09:29:46 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:55900 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754693AbeDFN3o (ORCPT ); Fri, 6 Apr 2018 09:29:44 -0400 Received: from localhost (LFbn-1-12247-202.w90-92.abo.wanadoo.fr [90.92.61.202]) by mail.linuxfoundation.org (Postfix) with ESMTPSA id 5E8F6C40; Fri, 6 Apr 2018 13:29:43 +0000 (UTC) From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, "Felipe F. Tonello" , Felipe Balbi Subject: [PATCH 4.4 09/72] usb: gadget: align buffer size when allocating for OUT endpoint Date: Fri, 6 Apr 2018 15:23:10 +0200 Message-Id: <20180406084305.868157370@linuxfoundation.org> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180406084305.210085169@linuxfoundation.org> References: <20180406084305.210085169@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.4-stable review patch. If anyone has any objections, please let me know. ------------------ From: Felipe F. Tonello commit e0466156ee2e944fb47a3fa00932c3698a6d2c67 upstream. 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 Signed-off-by: Felipe Balbi Signed-off-by: Greg Kroah-Hartman --- drivers/usb/gadget/u_f.c | 3 +++ drivers/usb/gadget/u_f.h | 16 +++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) --- a/drivers/usb/gadget/u_f.c +++ b/drivers/usb/gadget/u_f.c @@ -12,6 +12,7 @@ */ #include "u_f.h" +#include struct usb_request *alloc_ep_req(struct usb_ep *ep, size_t len, int default_len) { @@ -20,6 +21,8 @@ struct usb_request *alloc_ep_req(struct 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); --- a/drivers/usb/gadget/u_f.h +++ b/drivers/usb/gadget/u_f.h @@ -47,8 +47,22 @@ struct usb_ep; struct usb_request; -/* Requests allocated via alloc_ep_req() must be freed by free_ep_req(). */ +/** + * alloc_ep_req - returns a usb_request allocated by the gadget driver and + * allocates the request's buffer. + * + * @ep: the endpoint to allocate a usb_request + * @len: usb_requests's buffer suggested size + * @default_len: used if @len is not provided, ie, is 0 + * + * In case @ep direction is OUT, the @len will be aligned to ep's + * wMaxPacketSize. In order to avoid memory leaks or drops, *always* use + * usb_requests's length (req->length) to refer to the allocated buffer size. + * Requests allocated via alloc_ep_req() *must* be freed by free_ep_req(). + */ struct usb_request *alloc_ep_req(struct usb_ep *ep, size_t len, int default_len); + +/* Frees a usb_request previously allocated by alloc_ep_req() */ static inline void free_ep_req(struct usb_ep *ep, struct usb_request *req) { kfree(req->buf);