From patchwork Mon Feb 8 12:15:04 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Szyprowski X-Patchwork-Id: 61402 Delivered-To: patch@linaro.org Received: by 10.112.43.199 with SMTP id y7csp1400141lbl; Mon, 8 Feb 2016 04:15:25 -0800 (PST) X-Received: by 10.98.76.80 with SMTP id z77mr41852830pfa.121.1454933724881; Mon, 08 Feb 2016 04:15:24 -0800 (PST) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l9si46284701pfi.44.2016.02.08.04.15.24; Mon, 08 Feb 2016 04:15:24 -0800 (PST) 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 S1752850AbcBHMPW (ORCPT + 30 others); Mon, 8 Feb 2016 07:15:22 -0500 Received: from mailout1.w1.samsung.com ([210.118.77.11]:45650 "EHLO mailout1.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751327AbcBHMPR (ORCPT ); Mon, 8 Feb 2016 07:15:17 -0500 Received: from eucpsbgm1.samsung.com (unknown [203.254.199.244]) by mailout1.w1.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTP id <0O2800E6YA1E9Z00@mailout1.w1.samsung.com>; Mon, 08 Feb 2016 12:15:14 +0000 (GMT) X-AuditID: cbfec7f4-f79026d00000418a-cf-56b886d2fc02 Received: from eusync1.samsung.com ( [203.254.199.211]) by eucpsbgm1.samsung.com (EUCPMTA) with SMTP id AB.40.16778.2D688B65; Mon, 8 Feb 2016 12:15:14 +0000 (GMT) Received: from amdc1339.digital.local ([106.116.147.30]) by eusync1.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id <0O280077FA1BJZ00@eusync1.samsung.com>; Mon, 08 Feb 2016 12:15:14 +0000 (GMT) From: Marek Szyprowski To: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Marek Szyprowski , Ruslan Bilovol , Bartlomiej Zolnierkiewicz , Vegard Nossum , Maxime Ripard , Greg Kroah-Hartman , Peter Chen , Felipe Balbi Subject: [PATCH] usb: gadget: gadgetfs: unregister gadget only if it got successfully registered Date: Mon, 08 Feb 2016 13:15:04 +0100 Message-id: <1454933704-31233-1-git-send-email-m.szyprowski@samsung.com> X-Mailer: git-send-email 1.9.2 In-reply-to: <56B7D2C9.5070301@oracle.com> References: <56B7D2C9.5070301@oracle.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrILMWRmVeSWpSXmKPExsVy+t/xy7qX2naEGfx9LGOxccZ6VotjbU/Y LZoXr2ezuLxrDpvFomWtzBZrj9xlt9i6aS+zxbHZf5ksenaeYLQ427SG1YHL48mmi4we/w73 M3nsnHWX3WPTqk42j/1z17B7fHx6i8Wjb8sqRo/Pm+QCOKK4bFJSczLLUov07RK4Mvqn32cr OMFdsejOTfYGxkWcXYycHBICJhJdH16wQ9hiEhfurWfrYuTiEBJYyihx/+s3FginiUni7ZNz jCBVbAKGEl1vu4CqODhEBKwl+g4GgdQwC3xkkuiYO4EJpEZYIEni7tWfYDaLgKrEphnzmEFs XgEPiXMLv7NBbJOT+P9yBRPIHE4BLYkZH/xAwkICmhKdzzoZJzDyLmBkWMUomlqaXFCclJ5r qFecmFtcmpeul5yfu4kREpBfdjAuPmZ1iFGAg1GJh7eiY3uYEGtiWXFl7iFGCQ5mJRFen4Yd YUK8KYmVValF+fFFpTmpxYcYpTlYlMR55+56HyIkkJ5YkpqdmlqQWgSTZeLglGpgZOc2r16d d/yv4Ja0q/efnDoWb3PVe/HVQ107ueZb8UxrTFuzQKEl2XlCUVXZX6+Fj5KP2FXJ8hlt4dmd 9Lv9YyffxCar07HR/6y5vjz/uEh6616pH/1L/TSu7pEvTF1zsa3mpJTL/lkiZ4u9Rab2PjZg cA6e3L9fJ/be3pXRF47p7d/uOe95pxJLcUaioRZzUXEiALSAsOVEAgAA Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Gadgetfs driver called usb_gadget_unregister_driver unconditionally, even if it didn't register it earlier due to other failures. This patch fixes this. Reported-by: Vegard Nossum Signed-off-by: Marek Szyprowski --- drivers/usb/gadget/legacy/inode.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) -- 1.9.2 diff --git a/drivers/usb/gadget/legacy/inode.c b/drivers/usb/gadget/legacy/inode.c index 7a62a2f7bc18..cde6a2133c90 100644 --- a/drivers/usb/gadget/legacy/inode.c +++ b/drivers/usb/gadget/legacy/inode.c @@ -130,7 +130,8 @@ struct dev_data { setup_can_stall : 1, setup_out_ready : 1, setup_out_error : 1, - setup_abort : 1; + setup_abort : 1, + gadget_registered : 1; unsigned setup_wLength; /* the rest is basically write-once */ @@ -1179,7 +1180,8 @@ dev_release (struct inode *inode, struct file *fd) /* closing ep0 === shutdown all */ - usb_gadget_unregister_driver (&gadgetfs_driver); + if (dev->gadget_registered) + usb_gadget_unregister_driver (&gadgetfs_driver); /* at this point "good" hardware has disconnected the * device from USB; the host won't see it any more. @@ -1825,6 +1827,7 @@ dev_config (struct file *fd, const char __user *buf, size_t len, loff_t *ptr) * kick in after the ep0 descriptor is closed. */ value = len; + dev->gadget_registered = true; } return value;