• Takashi Iwai's avatar
    ALSA: seq: Fix races at MIDI encoding in snd_virmidi_output_trigger() · 8f22e525
    Takashi Iwai authored
    The sequencer virmidi code has an open race at its output trigger
    callback: namely, virmidi keeps only one event packet for processing
    while it doesn't protect for concurrent output trigger calls.
    
    snd_virmidi_output_trigger() tries to process the previously
    unfinished event before starting encoding the given MIDI stream, but
    this is done without any lock.  Meanwhile, if another rawmidi stream
    starts the output trigger, this proceeds further, and overwrites the
    event package that is being processed in another thread.  This
    eventually corrupts and may lead to the invalid memory access if the
    event type is like SYSEX.
    
    The fix is just to move the spinlock to cover both the pending event
    and the new stream.
    
    The bug was spotted by a new fuzzer, RaceFuzzer.
    
    BugLink: http://lkml.kernel.org/r/20180426045223.GA15307@dragonet.kaist.ac.krReported-by: default avatarDaeRyong Jeong <threeearcat@gmail.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    8f22e525
seq_virmidi.c 14.1 KB