From patchwork Thu Feb 18 07:59:26 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Szyprowski X-Patchwork-Id: 62157 Delivered-To: patch@linaro.org Received: by 10.112.43.199 with SMTP id y7csp442992lbl; Wed, 17 Feb 2016 23:59:37 -0800 (PST) X-Received: by 10.66.246.165 with SMTP id xx5mr8176789pac.87.1455782377759; Wed, 17 Feb 2016 23:59:37 -0800 (PST) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id b14si7784405pat.152.2016.02.17.23.59.37; Wed, 17 Feb 2016 23:59:37 -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 S1425053AbcBRH7g (ORCPT + 30 others); Thu, 18 Feb 2016 02:59:36 -0500 Received: from mailout4.w1.samsung.com ([210.118.77.14]:13706 "EHLO mailout4.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933759AbcBRH7e (ORCPT ); Thu, 18 Feb 2016 02:59:34 -0500 Received: from eucpsbgm1.samsung.com (unknown [203.254.199.244]) by mailout4.w1.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTP id <0O2Q00JY9GV7P100@mailout4.w1.samsung.com>; Thu, 18 Feb 2016 07:59:32 +0000 (GMT) X-AuditID: cbfec7f4-f79026d00000418a-03-56c579e38f3b Received: from eusync3.samsung.com ( [203.254.199.213]) by eucpsbgm1.samsung.com (EUCPMTA) with SMTP id 0C.C8.16778.3E975C65; Thu, 18 Feb 2016 07:59:31 +0000 (GMT) Received: from amdc1339.digital.local ([106.116.147.30]) by eusync3.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id <0O2Q005Y1GV3SC00@eusync3.samsung.com>; Thu, 18 Feb 2016 07:59:31 +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 RESEND] usb: gadget: gadgetfs: unregister gadget only if it got successfully registered Date: Thu, 18 Feb 2016 08:59:26 +0100 Message-id: <1455782366-4841-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+NgFtrALMWRmVeSWpSXmKPExsVy+t/xq7qPK4+GGfScMrfYOGM9q8Wxtifs Fs2L17NZXN41h81i0bJWZou1R+6yW2zdtJfZ4tjsv0wWPTtPMFqcbVrD6sDl8WTTRUaPf4f7 mTx2zrrL7rFpVSebx/65a9g9Pj69xeLRt2UVo8fnTXIBHFFcNimpOZllqUX6dglcGd8OzWEq +Mtd0diwjLGB8RJnFyMnh4SAicTbg81sELaYxIV764FsLg4hgaWMEis71zKDJIQEmpgkDqwR ArHZBAwlut52ARVxcIgIWEv0HQwCqWcW+Mgk0TF3AhNIjbBApsSL5lssIDaLgKrElEPnwWxe AXeJCdsWs0Msk5P4/3IFE8gcTgEtiRkf/CBWaUp0PutknMDIu4CRYRWjaGppckFxUnquoV5x Ym5xaV66XnJ+7iZGSDh+2cG4+JjVIUYBDkYlHl6O10fChFgTy4orcw8xSnAwK4nwfnM/GibE m5JYWZValB9fVJqTWnyIUZqDRUmcd+6u9yFCAumJJanZqakFqUUwWSYOTqkGxoVFMUdkTzut vRUR+MV+/erv4X+sJ753/vCAYUJj8o/k6tW1ny/U8BVeixDcmVR++uLZa1OkOA5o2bau/r52 2415y71bNVyWhMX16Vf+EuE4ERoTwJzyuqTroWvrLvF7JZpuLa+ahMKYbhx5E/f5UveHpRvP PF+5vf7zzowTed6fNt/j8nzHU6jEUpyRaKjFXFScCABzgFkAQwIAAA== 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 Tested-by: Vegard Nossum --- 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;