Skip to content

Commit 7b0a271

Browse files
mszyprowfelipebalbi
authored andcommitted
usb: gadget: gadgetfs: unregister gadget only if it got successfully registered
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 <[email protected]> Signed-off-by: Marek Szyprowski <[email protected]> Tested-by: Vegard Nossum <[email protected]> Signed-off-by: Felipe Balbi <[email protected]>
1 parent 31b994a commit 7b0a271

File tree

1 file changed

+5
-2
lines changed

1 file changed

+5
-2
lines changed

drivers/usb/gadget/legacy/inode.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,8 @@ struct dev_data {
130130
setup_can_stall : 1,
131131
setup_out_ready : 1,
132132
setup_out_error : 1,
133-
setup_abort : 1;
133+
setup_abort : 1,
134+
gadget_registered : 1;
134135
unsigned setup_wLength;
135136

136137
/* the rest is basically write-once */
@@ -1179,7 +1180,8 @@ dev_release (struct inode *inode, struct file *fd)
11791180

11801181
/* closing ep0 === shutdown all */
11811182

1182-
usb_gadget_unregister_driver (&gadgetfs_driver);
1183+
if (dev->gadget_registered)
1184+
usb_gadget_unregister_driver (&gadgetfs_driver);
11831185

11841186
/* at this point "good" hardware has disconnected the
11851187
* device from USB; the host won't see it any more.
@@ -1847,6 +1849,7 @@ dev_config (struct file *fd, const char __user *buf, size_t len, loff_t *ptr)
18471849
* kick in after the ep0 descriptor is closed.
18481850
*/
18491851
value = len;
1852+
dev->gadget_registered = true;
18501853
}
18511854
return value;
18521855

0 commit comments

Comments
 (0)