• Takashi Iwai's avatar
    ALSA: emux: Fix mutex deadlock in OSS emulation · c542e915
    Takashi Iwai authored
    commit 1c94e65c668f44d2c69ae7e7fc268ab3268fba3e upstream.
    The OSS emulation in synth-emux helper has a potential AB/BA deadlock
    at the simultaneous closing and opening:
      close ->
        snd_seq_release() ->
          sne_seq_free_client() ->
            snd_seq_delete_all_ports(): takes client->ports_mutex ->
    	  port_delete() ->
    	    snd_emux_unuse(): takes emux->register_mutex
      open ->
        snd_seq_oss_open() ->
          snd_emux_open_seq_oss(): takes emux->register_mutex ->
            snd_seq_event_port_attach() ->
    	  snd_seq_create_port(): takes client->ports_mutex
    This patch addresses the deadlock by reducing the rance taking
    emux->register_mutex in snd_emux_open_seq_oss().  The lock is needed
    for the refcount handling, so move it locally.  The calls in
    emux_seq.c are already with the mutex, thus they are replaced with the
    version without mutex lock/unlock.
    Signed-off-by: 's avatarTakashi Iwai <tiwai@suse.de>
    Signed-off-by: 's avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Last commit
Last update
emux Loading commit data...
Makefile Loading commit data...
util_mem.c Loading commit data...