diff options
author | Takashi Iwai <tiwai@suse.de> | 2021-09-29 11:08:37 +0300 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2021-09-30 14:55:19 +0300 |
commit | 86a42ad07905110f82648853c0ea3434b4eab173 (patch) | |
tree | 4803a5fb707e50d2a269ae9efc74703fa9e95e94 /sound/usb/validate.c | |
parent | 4e7cf1fbb34ecb472c073980458cbe413afd4d64 (diff) | |
download | linux-86a42ad07905110f82648853c0ea3434b4eab173.tar.xz |
ALSA: usb-audio: Fix possible race at sync of urb completions
USB-audio driver tries to sync with the clear of all pending URBs in
wait_clear_urbs(), and it waits for all bits in active_mask getting
cleared. This works fine for the normal operations, but when a stream
is managed in the implicit feedback mode, there is still a very thin
race window: namely, in snd_complete_usb(), the active_mask bit for
the current URB is once cleared before re-submitted in
queue_pending_output_urbs(). If wait_clear_urbs() is called during
that period, it may pass the test and go forward even though there may
be a still pending URB.
For covering it, this patch adds a new counter to each endpoint to
keep the number of in-flight URBs, and changes wait_clear_urbs()
checking this number instead. The counter is decremented at the end
of URB complete, hence the reference is kept as long as the URB
complete is in process.
Link: https://lore.kernel.org/r/20210929080844.11583-3-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/usb/validate.c')
0 files changed, 0 insertions, 0 deletions