Hi, "Felipe F. Tonello" <eu@xxxxxxxxxxxxxxxxx> writes: > [ text/plain ] > Since f_midi_transmit is called by both ALSA and USB sub-systems, it can > potentially cause a race condition between both calls because f_midi_transmit > is not reentrant nor thread-safe. This is due to an implementation detail that > the transmit function looks for the next available usb request from the fifo > and only enqueues it if there is data to send, otherwise just re-uses it. So, > if both ALSA and USB frameworks calls this function at the same time, > kfifo_seek() will return the same usb_request, which will cause a race > condition. > > To solve this problem a syncronization mechanism is necessary. In this case it > is used a spinlock since f_midi_transmit is also called by usb_request->complete > callback in interrupt context. > > Cc: <stable@xxxxxxxxxxxxxxx> # v4.4+ > Fixes: e1e3d7ec5da3 ("usb: gadget: f_midi: pre-allocate IN requests") > Signed-off-by: Felipe F. Tonello <eu@xxxxxxxxxxxxxxxxx> > Tested-by: Felipe F. Tonello <eu@xxxxxxxxxxxxxxxxx> adding one's own Tested-by is a bit redundant. I'll remove it while applying ;-) -- balbi
Attachment:
signature.asc
Description: PGP signature