On Fri, Jun 09, 2023 at 01:02:27AM +0000, Badhri Jagan Sridharan wrote: > usb_udc_connect_control(), soft_connect_store() and > usb_gadget_deactivate() can potentially race against each other to invoke > usb_gadget_connect()/usb_gadget_disconnect(). To prevent this, guard > udc->started, gadget->allow_connect, gadget->deactivate and > gadget->connect with connect_lock so that ->pullup() is only invoked when > the gadget is bound, started and not deactivated. The routines > usb_gadget_connect_locked(), usb_gadget_disconnect_locked(), > usb_udc_connect_control_locked(), usb_gadget_udc_start_locked(), > usb_gadget_udc_stop_locked() are called with this lock held. > > An earlier version of this commit was reverted due to the crash reported in > https://lore.kernel.org/all/ZF4BvgsOyoKxdPFF@xxxxxxxxxxxxxxxxxxxxxxxxxxxx/. > commit 16737e78d190 ("usb: gadget: udc: core: Offload usb_udc_vbus_handler processing") > addresses the crash reported. > > Cc: stable@xxxxxxxxxxxxxxx > Fixes: 628ef0d273a6 ("usb: udc: add usb_udc_vbus_handler") > Signed-off-by: Badhri Jagan Sridharan <badhri@xxxxxxxxxx> > --- Reviewed-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx>