| From 4384f167ce5fa7241b61bb0984d651bc528ddebe Mon Sep 17 00:00:00 2001 |
| From: Takashi Iwai <tiwai@suse.de> |
| Date: Mon, 16 Mar 2020 10:05:05 +0100 |
| Subject: ALSA: seq: virmidi: Fix running status after receiving sysex |
| |
| From: Takashi Iwai <tiwai@suse.de> |
| |
| commit 4384f167ce5fa7241b61bb0984d651bc528ddebe upstream. |
| |
| The virmidi driver handles sysex event exceptionally in a short-cut |
| snd_seq_dump_var_event() call, but this missed the reset of the |
| running status. As a result, it may lead to an incomplete command |
| right after the sysex when an event with the same running status was |
| queued. |
| |
| Fix it by clearing the running status properly via alling |
| snd_midi_event_reset_decode() for that code path. |
| |
| Reported-by: Andreas Steinmetz <ast@domdv.de> |
| Cc: <stable@vger.kernel.org> |
| Link: https://lore.kernel.org/r/3b4a4e0f232b7afbaf0a843f63d0e538e3029bfd.camel@domdv.de |
| Link: https://lore.kernel.org/r/20200316090506.23966-2-tiwai@suse.de |
| Signed-off-by: Takashi Iwai <tiwai@suse.de> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| sound/core/seq/seq_virmidi.c | 1 + |
| 1 file changed, 1 insertion(+) |
| |
| --- a/sound/core/seq/seq_virmidi.c |
| +++ b/sound/core/seq/seq_virmidi.c |
| @@ -95,6 +95,7 @@ static int snd_virmidi_dev_receive_event |
| if ((ev->flags & SNDRV_SEQ_EVENT_LENGTH_MASK) != SNDRV_SEQ_EVENT_LENGTH_VARIABLE) |
| continue; |
| snd_seq_dump_var_event(ev, (snd_seq_dump_func_t)snd_rawmidi_receive, vmidi->substream); |
| + snd_midi_event_reset_decode(vmidi->parser); |
| } else { |
| len = snd_midi_event_decode(vmidi->parser, msg, sizeof(msg), ev); |
| if (len > 0) |