From patchwork Mon May 21 11:18:07 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yoshihiro Shimoda X-Patchwork-Id: 10414713 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id D61AF6032B for ; Mon, 21 May 2018 11:18:51 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C6DED28825 for ; Mon, 21 May 2018 11:18:51 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id BB3C72882A; Mon, 21 May 2018 11:18:51 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4FF4828825 for ; Mon, 21 May 2018 11:18:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751597AbeEULSt (ORCPT ); Mon, 21 May 2018 07:18:49 -0400 Received: from relmlor4.renesas.com ([210.160.252.174]:61336 "EHLO relmlie3.idc.renesas.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751166AbeEULSs (ORCPT ); Mon, 21 May 2018 07:18:48 -0400 Received: from unknown (HELO relmlir2.idc.renesas.com) ([10.200.68.152]) by relmlie3.idc.renesas.com with ESMTP; 21 May 2018 20:18:46 +0900 Received: from relmlii1.idc.renesas.com (relmlii1.idc.renesas.com [10.200.68.65]) by relmlir2.idc.renesas.com (Postfix) with ESMTP id 4925F7238B; Mon, 21 May 2018 20:18:46 +0900 (JST) X-IronPort-AV: E=Sophos;i="5.49,426,1520866800"; d="scan'208";a="280148795" Received: from mail-hk2apc01lp0212.outbound.protection.outlook.com (HELO APC01-HK2-obe.outbound.protection.outlook.com) ([65.55.88.212]) by relmlii1.idc.renesas.com with ESMTP/TLS/AES256-SHA256; 21 May 2018 20:18:45 +0900 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=renesasgroup.onmicrosoft.com; s=selector1-renesas-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=g8SqEn7bjWx3XuX2zRxaBN6+VeQdYKuQ5hpREsiK9yU=; b=HBS3XRZAaLymVbSZQijAVDKi42n5WW0l02E8Xo/jCrENcCbcPeLtRrmyVAAuwlceCbsLQJwx6apR44Y38cwQykG9HGbc5Fp8OqJPpJxtzs0XkK/1jIIztvGKCZ4LLtvbfKz0xS59vUgAwTBlkJensec2iYCyWOVHX/MMLBONFDc= Received: from localhost.localdomain (211.11.155.138) by TY2PR01MB2299.jpnprd01.prod.outlook.com (2603:1096:404:10::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.776.11; Mon, 21 May 2018 11:18:42 +0000 From: Yoshihiro Shimoda To: balbi@kernel.org Cc: gregkh@linuxfoundation.org, linux-usb@vger.kernel.org, linux-renesas-soc@vger.kernel.org, Yoshihiro Shimoda Subject: [PATCH v2] usb: gadget: function: printer: avoid wrong list handling in printer_write() Date: Mon, 21 May 2018 20:18:07 +0900 Message-Id: <1526901487-22438-1-git-send-email-yoshihiro.shimoda.uh@renesas.com> X-Mailer: git-send-email 1.9.1 MIME-Version: 1.0 X-Originating-IP: [211.11.155.138] X-ClientProxiedBy: TY1PR01CA0142.jpnprd01.prod.outlook.com (2603:1096:402:1::18) To TY2PR01MB2299.jpnprd01.prod.outlook.com (2603:1096:404:10::16) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(48565401081)(4534165)(4627221)(201703031133081)(8559017)(2017052603328)(7153060)(7193020); SRVR:TY2PR01MB2299; X-Microsoft-Exchange-Diagnostics: 1; TY2PR01MB2299; 3:ddcj2Zl9N6Bks3GnoRH0nYqn9n5Uvvg+fvblcwy3Wk8RwQN2Vv65YCaTQCzJQgkePiJddcTrL4Hf7R1bhYT5ADacZ4sEexzqs6T0W8c0KTeg9PIwsPAGLFsOe6rDio2t2Txu4JlpLwFRRVmLIF93+LV4ZlN1KwR8WIyKUuqq9c+9AzE5WczfjxgyZ2vDjK/DV/cGmGoajJwqARqJalEK1DksGXlHXyd3jOoVU+AvzX5i6ZkCHPMaBKyfLPqSjp/Y; 25:06z8odrVGM5JlO4pE62RTjF45VqOwShmdQPvUouMTHFQg+ZPwOSuw4WvWsxC224jYgqlIIJinEoMMEAhwec03s6n3iTMJ4vE4oX9a/CfnVl7F53MMqOjgwAwIaZaBvnl018ewV2qxJPBGCW2QlgI8SlKvSfbvtDoReUvwgEHpbF9HWFWXz5+oD6PMcrZ6W6mcyuASek6EH/LI3v1n61ebxufvch0YfOGvTofbUFy2A8nqkBC5TJgUoyQJ06DF5buaZ8VRblD1iz1+d9Qe3yYvW/5/Dn0CbH6wA7FEompHh4FxGzrpZYu1zUzfrrfv92GWJBr0vuCoRhXYZJIaIB/0Q==; 31:Ihkx5atVCg65T75wxFRUrj3RkCu/7sWusvYWepRp9UXO3sZo7tLeXhztqFEW+7mGvo65GRHbv/KX5grSQHe9nocqLym8yDEOxh9EqweEHdUIE175EVX+imF/g6bRXDz9anNSsYqmO0T6JImRO2Qlq+NDomoeggfZ6clXqaVo/cFd2jxLdogp90xJgxF8HuiagFymXjlwoAx4BbHEeC+NS7nLTHYaCajSpann0Sx/3ZM= X-MS-TrafficTypeDiagnostic: TY2PR01MB2299: Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=<>; X-Microsoft-Exchange-Diagnostics: 1; TY2PR01MB2299; 20:v0g59kgOWQlB6gmQ7tIPWiHlGkUuK2Pkj9/IjlAd+6UsYat/T3m12HeaZPntMusXpS2oPwob/vQ+Te0zCmW6MFfLEPWWIEuUIE1gju50m/0KKuIP6/9V3VGDympl9PZEd6f5mu31zijPlXbLsXI5v/T0xyVzIsg0rEZzkGN7qvpG9Wnsb56Mbjg4ccgHz08HnazuHCoDYzybL4vMNc4WngDDfoEyEf93KI3K8NlLXS6t1uMf3snJriPtSlDsi/QshDcjniC3YfCHtCuoUIy0lXLg2bt0QKchNj5X72sjmLA8GT+8qdCDKN6HN/DTfc1v2XDD96bTNO5jNA8haq+fhhDDDrffG2OjbNGgozXFoZwZ/f/k2i0LpqaACUDXagcah4CniL4lNLGLLzogpXFBA0R0wYtopS2QhOpn9Rj7gSEyQwOzefN6/0cTQCweOFF7AgJOzOhCvdALan688L/PFrnqWTCfux1ECOls6CH86qSpM+UsK8AkG98AqdcMW2oD; 4:/L75lAcZ7o2LOE/jvaSO+NLXsn8CWMCyevWCXI51U6QKx4uuM77gE5tUdlrChvMoU4TL25G/LndXDTz9tKUmCH8N/TjyCrIz2nf4SFOTVHEcrdn05MKhHvLxzYzPkPNhgl6RwvmIBioNOTD/ysxrC5DvoZyf+spIXS2gJwOwoOaiOPPYKI50wRb2MVj1GvHcohSloDM9bWjDAGDKQ8Dpt9t4/B297Nk287X/UltL3ej+o2fcQiZOYMHcBUPqhU2OX+RQ5XhsvaxUo9nPtvOGel5FPXQDroE2SyrpIXjWqY8qV/L9OA/a9IZnIZk5WZq6 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(228905959029699); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(3002001)(10201501046)(93006095)(3231254)(944501410)(52105095)(6055026)(149027)(150027)(6041310)(20161123560045)(20161123562045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061750153)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:TY2PR01MB2299; BCL:0; PCL:0; RULEID:; SRVR:TY2PR01MB2299; X-Forefront-PRVS: 06793E740F X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(6069001)(39380400002)(346002)(39860400002)(396003)(366004)(376002)(199004)(189003)(486006)(6486002)(26005)(316002)(25786009)(7736002)(50226002)(47776003)(305945005)(2616005)(6506007)(956004)(105586002)(2351001)(476003)(106356001)(59450400001)(48376002)(50466002)(6916009)(97736004)(6666003)(386003)(66066001)(68736007)(16586007)(42882007)(5660300001)(51416003)(52116002)(6116002)(53936002)(81156014)(107886003)(78352004)(36756003)(8676002)(16526019)(2361001)(4326008)(81166006)(2906002)(8936002)(6512007)(498600001)(3846002)(3720700003); DIR:OUT; SFP:1102; SCL:1; SRVR:TY2PR01MB2299; H:localhost.localdomain; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:0; MX:0; Received-SPF: None (protection.outlook.com: localhost.localdomain does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; TY2PR01MB2299; 23:SsqaqxyXxW//sf7t45Xmlre7yv0WVh61TumrcWA/d?= =?us-ascii?Q?AIQADRlncfOZ5gqnxdwWIBiYIW6PYBEeVX032mmcZ0WtQ5UY5iBXe+RWP1B0?= =?us-ascii?Q?xPfI6WQzSW/4RGJPFEXgybFrso8Mqd536ktzL1JgD/mQA1dlIpaZ9dvoQCD7?= =?us-ascii?Q?b8Vipz7oMBe/0V2bTXG1QJKJrG6bOOVCeYUNt+JcBiQ8+Q+Zv67PG8FiSkRw?= =?us-ascii?Q?g+lJLfzXRqQglqHf0a5tdEvp00SOYsVKa0s5IidwB2kCzwyTAgiOJG7d4PRf?= =?us-ascii?Q?V+A79ZcFd85taTY2RGsw0gMFY7bEBB7czPucM1ZqyoZ3PG9Rw6OmEpUHWHhC?= =?us-ascii?Q?sB9SIqRRe8rsrVpurZdwfjq1phZPofynnclYGD6u19Hag68Jx2m3oeysU0Av?= =?us-ascii?Q?4XrGyv3+AsO+W1lX+hCu4yEYfyLGvw7/WQbQ/wep4YBI/83L+nsY0s4HCB/Z?= =?us-ascii?Q?7a2g5T/xcElY96JDlMeuTrs/O2fGiZo7iGwGfhq400fzGO4SEMWUR5t+E9AI?= =?us-ascii?Q?PbvvIv4/DfyjATByyHAtZeWravQ3Nm5WYfOFw9eJ/7dKIi1nhPk7L/LC0Bvz?= =?us-ascii?Q?0Yw8fEq/UTZSnJOa8GnZbDPTUCT+eVoxoCecI6Op2o8jDKA0L4S55gHOZL1z?= =?us-ascii?Q?0EuiQ/eZhw7EXz8cw4wf8z0ISero+PAwf8b/Fx9sbioVJ/WFnlICe0Y1BWrv?= =?us-ascii?Q?LzbR9To2E08IDxiRtrvZJuJLy5uT9L6O/GCZHEUhO/mgYkXePcx6GBP9tE9L?= =?us-ascii?Q?i42HAr8LMWRzzBwSRvoAB9RX6yLK9oiWPUYbLkLjxcYbw/NLTm8vPIkmWGCo?= =?us-ascii?Q?UTqGzczAf/mz1fSjSlNc7/wU0EzlKY0yr5DxtnVv4aHDAEVvFViFFJofATcm?= =?us-ascii?Q?mQC8IJbarvxkx9l50i35BYMt42QbdNrqacDP8aP0CV9LHAYF0dpkFahfDo6z?= =?us-ascii?Q?QvBnxLFWHRWBVi5HU8d6ROEJI/ldIKSiI1K+Zz66HKjmhCUmSRqKgT5xRYG2?= =?us-ascii?Q?g4fGn2vmBrfKchkEdZLDD7sYUEiJGXjzFCpr10fGuMvvVJoL5Ahkrm04U7E9?= =?us-ascii?Q?p0SlbTlenjk/FeatNKL/AbohpAKAfTUCVK9lZH98bMib8de2XtEVDw3+kbgd?= =?us-ascii?Q?58Oc08MD02raFbqvszHlEqS4Bqii8+vCBeWoFgXP043Z/fTfaxyj9C5zZdKd?= =?us-ascii?Q?hAnyavRaUJh+ixmZ7frFwh2Je10ooeAitA+3H+NDTfGFJmdbD5zE+vOA84Jn?= =?us-ascii?Q?cWT3nDVDFsAxZdcTYg=3D?= X-Microsoft-Antispam-Message-Info: rS3/zF+K66eEfFXCrhAP7fJ64ACtUUTDzsnVSpMJR+YVYSlrm9cMFMetWtgpOFF7Sh/G/ja880S8erswOlfBix6z71+KufsUKV9c8FPBT2Qf1dx0unAU8yqALOkSPwMH9Mzvy2YyGj4nb0/TFOhlz2It0BM3j/FRZevfyE5zRFJHs33hXhQR7cfAnFdPS25L X-Microsoft-Exchange-Diagnostics: 1; TY2PR01MB2299; 6:TFl5JI1N/hI7gUPmkJrpxRjkasIMGexbFZvyDsZQLOgY/FkUeUesj6mnDhRWkzd3yhR4p3oYinvR3i3e1+2JPBTZCYS3SnwNPLSpV568pIjQbvxBK48rt0sgeo+3DeRoCK7YB2HikxZcUirgvYXuYG2jD97YTn29pTvxTOGHH1DCre+CJLUdz3SOcAAxvMzC2skO5aoqE01Gkpc5vBDtQ/GWvSkGFJa+0WXiodfOzlKIlncjQPYkwN1nxkKnVJ7jnVnhx4ck3WP8WVFwCTQiEBBBjANlqr6IHEvlG1RdlBjFBUiZgUx4MwoQzG+O8zGVQZVTtTCkg+auWatKpXHAnYxgBTWkCoPQABWbnlWAw4MKItHVWLrM7lVb6k221tC5nnBulF7QiFO4qPn+rZEnNHKirpYLMdseJ1ArOGHvdJWqLgA/JzKUDop3WSDJq5rwAKi1TAtPUemJR4ae3hCuNw==; 5:gWi+MBj62lJJJog9zDFGS5VbYbySOhlwlZEMWNwI84bJUc5ESp1D5R55em4LL+Z+DaXHNUKLoJqToxsamkCUYZCKXnmop6eXmCnTVxNR+djP3NQS+FEBEG3B4oIi2Es3wWOcHENUlqD9cqjojmGA3jGGG4Bp+0OaP//c8xbDsDM=; 24:/+ZSCxJPQGlV8LxL6NQuT/i0u4JY4mhM3k1MqZXYnXWAuQ+OV/AeJOihZLjzfl39hvIACsqjmrFkTNt2yuQ/tR/TvtA4KAtvoDI3YPQqk5w= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; TY2PR01MB2299; 7:NI0qQaYErunAIBKeuPMjMTPUvivDCGlJjQ/pNiLcZn0lI0LwdXfHkgxmDfvxXO8CFfgRIJq3ODcO2NUvBWaYYBOtliCmFc9ZS5hgEo2OPLQ6SL2h7oBf6Rpc3Ku1rTaRg+H7oICILNpQpx43zoRqqT63DAnx+NlKKEL9f+xsh5yh0BWEFKChHy2usPNgc3KNTHqhOhYhAIGaYLHMEqWbMqDnWmyHzBkFDYFokyFwFOoLnJzP3yqpOxhM/kzQjd25; 20:5GbmS6HkutlreCHUZ2dqL/06um86PEp7XjyTk/UaKsb+mi93D+W+ruX2NsYp52efcGJ0MaTrE8kVhcbT9XW7z1M1eFqGwSwwz4f/fqGmLSpRjE7yjNcfSJ6D8QFr0zkNRJLfjFkzqPtFGWi+NCHHeH02zRFAns5rZ6LWHkGarcA= X-MS-Office365-Filtering-Correlation-Id: 8a69cd01-e9ca-4d1e-c6af-08d5bf0c9c39 X-OriginatorOrg: renesas.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 May 2018 11:18:42.3713 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 8a69cd01-e9ca-4d1e-c6af-08d5bf0c9c39 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 53d82571-da19-47e4-9cb4-625a166a4a2a X-MS-Exchange-Transport-CrossTenantHeadersStamped: TY2PR01MB2299 Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP When printer_write() calls usb_ep_queue(), a udc driver (e.g. renesas_usbhs driver) may call usb_gadget_giveback_request() in the udc .queue ops immediately. Then, printer_write() calls list_add(&req->list, &dev->tx_reqs_active) wrongly. After that, if we do unbind the printer driver, WARN_ON() happens in printer_func_unbind() because the list entry is not removed. So, this patch moves list_add(&req->list, &dev->tx_reqs_active) calling before usb_ep_queue(). Signed-off-by: Yoshihiro Shimoda Acked-by: Felipe Balbi --- Changes from RFC (v1): - Modify the implementation to fix the issue. - Add "Acked-by Felipe Balbi". - Remove RFC. - Revise commit log. drivers/usb/gadget/function/f_printer.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/usb/gadget/function/f_printer.c b/drivers/usb/gadget/function/f_printer.c index d359efe..9c7ed25 100644 --- a/drivers/usb/gadget/function/f_printer.c +++ b/drivers/usb/gadget/function/f_printer.c @@ -631,19 +631,19 @@ static void tx_complete(struct usb_ep *ep, struct usb_request *req) return -EAGAIN; } + list_add(&req->list, &dev->tx_reqs_active); + /* here, we unlock, and only unlock, to avoid deadlock. */ spin_unlock(&dev->lock); value = usb_ep_queue(dev->in_ep, req, GFP_ATOMIC); spin_lock(&dev->lock); if (value) { + list_del(&req->list); list_add(&req->list, &dev->tx_reqs); spin_unlock_irqrestore(&dev->lock, flags); mutex_unlock(&dev->lock_printer_io); return -EAGAIN; } - - list_add(&req->list, &dev->tx_reqs_active); - } spin_unlock_irqrestore(&dev->lock, flags);