Skip to content
  • Takashi Iwai's avatar
    ALSA: pcm: Fix UAF at PCM release via PCM timer access · 0bb55791
    Takashi Iwai authored
    commit a820ccbe
    
     upstream.
    
    The PCM runtime object is created and freed dynamically at PCM stream
    open / close time.  This is tracked via substream->runtime, and it's
    cleared at snd_pcm_detach_substream().
    
    The runtime object assignment is protected by PCM open_mutex, so for
    all PCM operations, it's safely handled.  However, each PCM substream
    provides also an ALSA timer interface, and user-space can access to
    this while closing a PCM substream.  This may eventually lead to a
    UAF, as snd_pcm_timer_resolution() tries to access the runtime while
    clearing it in other side.
    
    Fortunately, it's the only concurrent access from the PCM timer, and
    it merely reads runtime->timer_resolution field.  So, we can avoid the
    race by reordering kfree() and wrapping the substream->runtime
    clearance with the corresponding timer lock.
    
    Reported-by: default avatar <syzbot+8e62ff4e07aa2ce87826@syzkaller.appspotmail.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    0bb55791