From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753055AbcBHMdj (ORCPT ); Mon, 8 Feb 2016 07:33:39 -0500 Received: from userp1040.oracle.com ([156.151.31.81]:43774 "EHLO userp1040.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752825AbcBHMdh (ORCPT ); Mon, 8 Feb 2016 07:33:37 -0500 Subject: Re: [PATCH] usb: gadget: gadgetfs: unregister gadget only if it got successfully registered To: Marek Szyprowski , linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org References: <56B7D2C9.5070301@oracle.com> <1454933704-31233-1-git-send-email-m.szyprowski@samsung.com> Cc: Ruslan Bilovol , Bartlomiej Zolnierkiewicz , Maxime Ripard , Greg Kroah-Hartman , Peter Chen , Felipe Balbi From: Vegard Nossum Message-ID: <56B88B0B.8020503@oracle.com> Date: Mon, 8 Feb 2016 13:33:15 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.5.1 MIME-Version: 1.0 In-Reply-To: <1454933704-31233-1-git-send-email-m.szyprowski@samsung.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-Source-IP: userv0022.oracle.com [156.151.31.74] Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 02/08/2016 01:15 PM, Marek Szyprowski wrote: > 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(-) > > 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; > > That (along with the first patch) fixes the problem! Thanks. It also seems to have fixed another crash I was seeing with req->complete == NULL in usb_gadget_giveback_request(). Vegard