]> git.itanic.dy.fi Git - linux-stable/commit
ALSA: emux: Fix mutex deadlock in OSS emulation
authorTakashi Iwai <tiwai@suse.de>
Tue, 28 Apr 2015 15:11:44 +0000 (17:11 +0200)
committerZefan Li <lizefan@huawei.com>
Fri, 18 Sep 2015 01:20:34 +0000 (09:20 +0800)
commitdbaa20e3925c0105df964131df9702713cb79ae2
tree3e484d6c24d8f6b077b1afb571e4f4e092385197
parent475aba9aea0a8f58a4fcdb7b5307fdae3f899d09
ALSA: emux: Fix mutex deadlock in OSS emulation

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: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Zefan Li <lizefan@huawei.com>
sound/synth/emux/emux_oss.c
sound/synth/emux/emux_seq.c