Hi, Vegard Nossum <vegard.nossum@xxxxxxxxxx> writes: > 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@xxxxxxxxxx> >> Signed-off-by: Marek Szyprowski <m.szyprowski@xxxxxxxxxxx> >> --- >> 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(). please resend both patches with proper Acks and Tested-bys so I can apply them. -- balbi
Attachment:
signature.asc
Description: PGP signature