Messages in this thread | | | Subject | Re: [PATCH] usb: gadget: gadgetfs: unregister gadget only if it got successfully registered | From | Vegard Nossum <> | Date | Mon, 8 Feb 2016 13:33:15 +0100 |
| |
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 <vegard.nossum@oracle.com> > Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> > --- > 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
| |