From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756055AbbIUHm2 (ORCPT ); Mon, 21 Sep 2015 03:42:28 -0400 Received: from mail-by2on0141.outbound.protection.outlook.com ([207.46.100.141]:13343 "EHLO na01-by2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752625AbbIUHm0 (ORCPT ); Mon, 21 Sep 2015 03:42:26 -0400 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=freescale.com; samsung.com; dkim=none (message not signed) header.d=none;samsung.com; dmarc=none action=none header.from=freescale.com; Date: Mon, 21 Sep 2015 14:29:30 +0800 From: Peter Chen To: CC: , , "Greg Kroah-Hartman" , Felipe Balbi , Andrzej Pietrasiewicz Subject: Re: [PATCH 1/2] usb: chipidea: udc: improve error handling on ep_queue Message-ID: <20150921062929.GA15180@shlinux2> References: <1442596361-404-1-git-send-email-eu@felipetonello.com> <1442596361-404-2-git-send-email-eu@felipetonello.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: <1442596361-404-2-git-send-email-eu@felipetonello.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1;BY2FFO11OLC001;1:NgZV70MJksF5jNswBFSjuS1fxRn44QQtqR8MpLAO9ehLvmZbCCaeD9AW9lK1yOaqbNqml1rTmgxJDHY8SNRAAvjYOtN8SZLVKEq9B6oIDHv5bhC0x4hr2X/ZRcjO7anEQAun6wAtkT198FCqcL4YJlNj3PjJmLRamDbL32t1hsUjenb/pHElxYhUkstMIFSca3ZBTTRmA8FOKZCFHHR5PWIMTBu+Q0MurXr8Yh3DMFwYTklhEcfxUyg7QFYsGHPY+IOfyhb3dNmVHtLgXSRz0z8YMuIANGd3/xQFDyiI28B3QyBMQCXCxQxpSatEslv6QH9hRQDCQ58yMaz3WDo9k5SnQyU2UWCsAH75Mc5yvncM5TIXFv58MXoyNoCBstRQ X-Forefront-Antispam-Report: CIP:192.88.168.50;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10019020)(6009001)(2980300002)(1109001)(1110001)(339900001)(51234002)(24454002)(199003)(189002)(97736004)(46406003)(4001350100001)(47776003)(87936001)(19580405001)(5001860100001)(6806004)(64706001)(104016003)(4001540100001)(81156007)(2351001)(92566002)(46102003)(11100500001)(19580395003)(2950100001)(105606002)(189998001)(106466001)(110136002)(5001830100001)(62966003)(77096005)(83506001)(77156002)(68736005)(97756001)(86362001)(50986999)(76176999)(54356999)(33656002)(33716001)(50466002)(85426001)(23726002);DIR:OUT;SFP:1102;SCL:1;SRVR:BN3PR0301MB1268;H:tx30smr01.am.freescale.net;FPR:;SPF:Fail;PTR:InfoDomainNonexistent;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BN3PR0301MB1268;2:wqG8U5oLeVxMHlGf+NXv4aFW5XFmBWKH6zdB5RfdumgaNAnekfhcRNNfJerM3n4WO0/2dW4ywb1O/PbMjc94zNYCBxPdjnU1OOumUgrY8UdlAHO+rGTQIbG+H2O7x35gsephhlHa1qJIlc+tgLX36QXxF0MLpAQCRDhgRjKbb5k=;3:04Z8CIOkdulDsVoe08fBpFAOBzZkgw1DG01JwqTa36N7HB381RXk3spPDygQE9r87NY7/69QoFu/iTIMQIt0blDANZ3IPmm23yJ+77M87AS6vXSoehRswybBV7plEV/LZji6Fsf2YNiU0DPZLj52U6+SQ2T84lX4sVcZWXjzuqoDdf/lPHJTxnRah7pdhhvuNX+AgJgIOtEJ68J54XGn/AXoYixBp/Ul9Q9xYyed7RY=;25:4ZrOlxro2PfOttqx0MQjhHaWj6gx2ekePTa0+uqCeX3MPo7WEZirzHGxAsWjU1S1VPZnV+Au+7j3lhTUfKTIcD2WDOYVIygc7OqMXPP7mGVrbFZtlZuxGv+DoP9MD4/0vfG+7ydelhfYkxAyM0nlWEFGm46crPSaYhBTp06ceC9Jv/L9dV8sV52JeuWE2wgT3G6Id7SxVLq5VcmAnkjF7qKFZwncT3oAfo48U4TIWA2oZ/8ReUoZeNrlwtbcqQSZ X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BN3PR0301MB1268; X-Microsoft-Exchange-Diagnostics: 1;BN3PR0301MB1268;20:5NRUeYouiJcAVoQlF0mCy7X5bws3I07b0Z9C8khOT1eY1qBBSsVajP6h9r8cOupNQXvFr6wZjQLtB3oMYEabjO5yp7erP87SJvO+rH9NL8rosa/SA7gbiU008rEm3gl2hv6tSzDsDCXnIikoWuqIV207KseEgMncmWcp5nO9wttFkgvLY+Qb4Hiio3yvg/dB73t7mWUWAVVe0s7t6aEM8wS8JzhMfr3QNQepgkf9+J0QWtUAdlvkQ95IHHaJw3nsn4YrN5GXB5pkfvKwXpGUYmR7THrV0qtlDkmMs8BjwGuM/6705Pq3kVz7XyZlK/CG8kIuShjOFOac0xUhuq26jeWJhBU3ca7F7Ep7Z60PCIA=;4:kIpZIJpdVDZ3j0IecLL8l1skwp7Dada+u4OLrr4OfJc2zCiFskRxP44fI+uLH+WdujIJTUHZSAwuuijibfOV6GrPIXukgXn/q9aPr+EzFNH7nzX9jTxgdrXVsj3wVzv0M1Z9lSWpqYExM0t+JqhcYkCgu/CRccjBqxf+b6syY9+FrZQztLhppQ6eN/5CzKgT2x6iV+q3OKmFthThkCGTuvCFhg8zvWX71mLD/5tGqCk= X-Exchange-Antispam-Report-CFA: BCL:0;PCL:0;RULEID:;SRVR:BN3PR0301MB1268;BCL:0;PCL:0;RULEID:;SRVR:BN3PR0301MB1268; X-Forefront-PRVS: 07063A0A30 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BN3PR0301MB1268;23:V9MKWhTSnw9H/+yAcQVKDPnmXActIk9twh1rx80?= =?us-ascii?Q?cAB2gqNmw6SJ7CiPWe9dlRpDPsBHs4PrwxS4YcOf45cb9GLJKQzFX21zxgdW?= =?us-ascii?Q?EIEft7GGjNn3Q0oRghsYomi0D8IULXZQOMIHb7ca2EViRVogPCx+dPRx4DTy?= =?us-ascii?Q?yDd1KOV12V5Mmjp0MsZyC6uCnkQvARJ3GDZuAE60CPQ81rwYg40WErJ/MBWx?= =?us-ascii?Q?W9mKWdewwjwp5X6R9Mcbdg8WWZlFQki9CepuYhfo3XOivQYbhCw442u0LTMJ?= =?us-ascii?Q?G8pNa1OqzO3ZGX5bnCpwN6Mo/ETx16fjDBzNIUG8zGhlIXrjMdWf1yD7/HEu?= =?us-ascii?Q?8hU9OMqka9UGfKge2B9rYZi7VawYvinjYAjbb9Tux8JVi7DnkNKYk6ZMMpCq?= =?us-ascii?Q?iv9/IfkRYPM5kgRRmVEa8ltapUxwlHJNVTU53dr0BNliTS1WvbK+wJngNz2i?= =?us-ascii?Q?3rBWv3nFrbaohSPvDjbnsW8pdMC9cnzT0lXkFb8/4mNzIRDM5LRy/aIX5vPR?= =?us-ascii?Q?Q2y1bXWeK63fem+RbK9FjIwlCAOU9LJFwK6whdeJR1YMALI4UQHI6AQbMD9F?= =?us-ascii?Q?TUmCOtDZT4IQqRqAIUjIfAKJKe33bnuXHlALdtJSgkmjGQNvWtSM321GG91K?= =?us-ascii?Q?NNS6zA3xVIdC6wet4MQnwJ47DH0ViaaGqVktyFwiZH2DVXlRaSI3Wl0YoR8e?= =?us-ascii?Q?P4U1zswxhvSuHG1DGLqNfbAiCOA7vbYyorEJy6yOHAlcjrvtHum3Lyn8dPiG?= =?us-ascii?Q?mynFGh6YCgrnxTR71j1EEz7Z52mIe9AHxLTk3WzqEscbqbgwX9xtQMtbFjnm?= =?us-ascii?Q?yqpf189IO8niktvGtB2gTRDy5FuX9S/l/eneeOz88K3rGYQsbIqDWo5s4LNG?= =?us-ascii?Q?fkdMryIHKWB54M41LPw//Hx7/q6IF7725MnrXDxKpLWXQ/1ucomqsV6WWkAL?= =?us-ascii?Q?70NoppciS993TqgznpzB9dZMMI2oCqJK+Ij/mZA4b7G0RuFMR53p5yy9SWqO?= =?us-ascii?Q?THPBbnBPXNlDC/0XfmG0gieJ0CSW4saFnr0LyTV7nHCxuwXJF3tuGyGyPqXf?= =?us-ascii?Q?FCOwCGmZYvqquZbyQn97z4CCPPp7xXFjyPwnafOMNzpek/jR37Y+QAmTzCXW?= =?us-ascii?Q?nZYrTK2ghlag2A1Y0Kpad48M31I6f00Jt2sttBEN4xNYGNGRSGwp6LYDlWy3?= =?us-ascii?Q?GTFJ/sEIRNxLLREqPwnnCbpvTgdjG+9IrSLkd7LYZ6+QaTa81T/qgQpzm7w?= =?us-ascii?Q?=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;BN3PR0301MB1268;5:q54nAaY9Su3E6JRnbfJ5HLDvHejLJph6xGpy5wIOGzcsdtQnfeYSPH485C7aSTPrxptS3CH/qbm7iWnxrHnKwUAuqNRTVvi503euUzXwUKxsvbWrQ+w6ziKNgQvrA/38PkSPO9spV8TkWsj2dUIcTg==;24:WIwi5JICjHaYDgYoewb4CfO+7L5Ga21rUhi2/b8v9ui76Oxi/iNIE6DFXAwDGUiUzlPMX5fAId5R0TWCorZsT+V/89lQypAKqY/7Tkvv3xY=;20:7RIdG8nIOZNPGENt1HdddJqC6momTiNo14ggViiddw+AxaVOcseLZH+M95WK0qSZ+qqfMqDVvcoB/TfqZKHEyA== SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Sep 2015 07:42:21.9150 (UTC) X-MS-Exchange-CrossTenant-Id: 710a03f5-10f6-4d38-9ff4-a80b81da590d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=710a03f5-10f6-4d38-9ff4-a80b81da590d;Ip=[192.88.168.50];Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN3PR0301MB1268 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Sep 18, 2015 at 06:12:40PM +0100, eu@felipetonello.com wrote: > From: "Felipe F. Tonello" > > _ep_queue() didn't check for errors when using add_td_to_list() > which can fail if dma_pool_alloc fails, thus causing a kernel Would you find the root cause why dma_pool_alloc fails? > panic when lastnode->ptr is NULL. > > Signed-off-by: Felipe F. Tonello > --- > drivers/usb/chipidea/udc.c | 26 +++++++++++++++++++------- > 1 file changed, 19 insertions(+), 7 deletions(-) > > diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c > index 764f668..7169113e 100644 > --- a/drivers/usb/chipidea/udc.c > +++ b/drivers/usb/chipidea/udc.c > @@ -404,9 +404,9 @@ static inline u8 _usb_addr(struct ci_hw_ep *ep) > } > > /** > - * _hardware_queue: configures a request at hardware level > - * @gadget: gadget > + * _hardware_enqueue: configures a request at hardware level > * @hwep: endpoint > + * @hwreq: request > * > * This function returns an error code > */ > @@ -435,19 +435,27 @@ static int _hardware_enqueue(struct ci_hw_ep *hwep, struct ci_hw_req *hwreq) > if (hwreq->req.dma % PAGE_SIZE) > pages--; > > - if (rest == 0) > - add_td_to_list(hwep, hwreq, 0); > + if (rest == 0) { > + ret = add_td_to_list(hwep, hwreq, 0); > + if (ret < 0) > + goto done; > + } > > while (rest > 0) { > unsigned count = min(hwreq->req.length - hwreq->req.actual, > (unsigned)(pages * CI_HDRC_PAGE_SIZE)); > - add_td_to_list(hwep, hwreq, count); > + ret = add_td_to_list(hwep, hwreq, count); > + if (ret < 0) > + goto done; > rest -= count; > } > > if (hwreq->req.zero && hwreq->req.length > - && (hwreq->req.length % hwep->ep.maxpacket == 0)) > - add_td_to_list(hwep, hwreq, 0); > + && (hwreq->req.length % hwep->ep.maxpacket == 0)) { > + ret = add_td_to_list(hwep, hwreq, 0); > + if (ret < 0) > + goto done; > + } > > firstnode = list_first_entry(&hwreq->tds, struct td_node, td); > > @@ -750,8 +758,12 @@ static void isr_get_status_complete(struct usb_ep *ep, struct usb_request *req) > > /** > * _ep_queue: queues (submits) an I/O request to an endpoint > + * @ep: endpoint > + * @req: request > + * @gfp_flags: GFP flags (not used) > * > * Caller must hold lock > + * This function returns an error code > */ > static int _ep_queue(struct usb_ep *ep, struct usb_request *req, > gfp_t __maybe_unused gfp_flags) > -- > 2.1.4 > -- Best Regards, Peter Chen