[alsa-devel] possible deadlock in snd_seq_deliver_event

Dmitry Vyukov dvyukov at google.com
Fri Oct 27 10:11:18 CEST 2017


On Fri, Oct 27, 2017 at 10:09 AM, syzbot
<bot+7feb8de6b4d6bf810cf098bef942cc387e79d0ad at syzkaller.appspotmail.com>
wrote:
> Hello,
>
> syzkaller hit the following crash on
> 2bd6bf03f4c1c59381d62c61d03f6cc3fe71f66e
> git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git/master
> compiler: gcc (GCC) 7.1.1 20170620
> .config is attached
> Raw console output is attached.
> C reproducer is attached
> syzkaller reproducer is attached. See https://goo.gl/kgGztJ
> for information about syzkaller reproducers
>
>
> ============================================
> WARNING: possible recursive locking detected
> 4.14.0-rc1+ #88 Not tainted
> --------------------------------------------
> syzkaller883997/2981 is trying to acquire lock:
>  (&grp->list_mutex){++++}, at: [<ffffffff83d4dd49>] deliver_to_subscribers
> sound/core/seq/seq_clientmgr.c:666 [inline]
>  (&grp->list_mutex){++++}, at: [<ffffffff83d4dd49>]
> snd_seq_deliver_event+0x279/0x790 sound/core/seq/seq_clientmgr.c:807
>
> but task is already holding lock:
>  (&grp->list_mutex){++++}, at: [<ffffffff83d4dd49>] deliver_to_subscribers
> sound/core/seq/seq_clientmgr.c:666 [inline]
>  (&grp->list_mutex){++++}, at: [<ffffffff83d4dd49>]
> snd_seq_deliver_event+0x279/0x790 sound/core/seq/seq_clientmgr.c:807
>
> other info that might help us debug this:
>  Possible unsafe locking scenario:
>
>        CPU0
>        ----
>   lock(&grp->list_mutex);
>   lock(&grp->list_mutex);
>
>  *** DEADLOCK ***
>
>  May be due to missing lock nesting notation
>
> 2 locks held by syzkaller883997/2981:
>  #0:  (register_mutex#4){+.+.}, at: [<ffffffff83d60ada>]
> odev_release+0x4a/0x70 sound/core/seq/oss/seq_oss.c:152
>  #1:  (&grp->list_mutex){++++}, at: [<ffffffff83d4dd49>]
> deliver_to_subscribers sound/core/seq/seq_clientmgr.c:666 [inline]
>  #1:  (&grp->list_mutex){++++}, at: [<ffffffff83d4dd49>]
> snd_seq_deliver_event+0x279/0x790 sound/core/seq/seq_clientmgr.c:807
>
> stack backtrace:
> CPU: 1 PID: 2981 Comm: syzkaller883997 Not tainted 4.14.0-rc1+ #88
> Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS
> Google 01/01/2011
> Call Trace:
>  __dump_stack lib/dump_stack.c:16 [inline]
>  dump_stack+0x194/0x257 lib/dump_stack.c:52
>  print_deadlock_bug kernel/locking/lockdep.c:1797 [inline]
>  check_deadlock kernel/locking/lockdep.c:1844 [inline]
>  validate_chain kernel/locking/lockdep.c:2453 [inline]
>  __lock_acquire+0x1232/0x4620 kernel/locking/lockdep.c:3498
>  lock_acquire+0x1d5/0x580 kernel/locking/lockdep.c:4002
>  down_read+0x96/0x150 kernel/locking/rwsem.c:23
>  deliver_to_subscribers sound/core/seq/seq_clientmgr.c:666 [inline]
>  snd_seq_deliver_event+0x279/0x790 sound/core/seq/seq_clientmgr.c:807
>  snd_seq_kernel_client_dispatch+0x11e/0x150
> sound/core/seq/seq_clientmgr.c:2309
>  dummy_input+0x2c4/0x400 sound/core/seq/seq_dummy.c:104
>  snd_seq_deliver_single_event.constprop.11+0x2fb/0x940
> sound/core/seq/seq_clientmgr.c:621
>  deliver_to_subscribers sound/core/seq/seq_clientmgr.c:676 [inline]
>  snd_seq_deliver_event+0x318/0x790 sound/core/seq/seq_clientmgr.c:807
>  snd_seq_kernel_client_dispatch+0x11e/0x150
> sound/core/seq/seq_clientmgr.c:2309
>  dummy_input+0x2c4/0x400 sound/core/seq/seq_dummy.c:104
>  snd_seq_deliver_single_event.constprop.11+0x2fb/0x940
> sound/core/seq/seq_clientmgr.c:621
>  snd_seq_deliver_event+0x12c/0x790 sound/core/seq/seq_clientmgr.c:818
>  snd_seq_kernel_client_dispatch+0x11e/0x150
> sound/core/seq/seq_clientmgr.c:2309
>  snd_seq_oss_dispatch sound/core/seq/oss/seq_oss_device.h:150 [inline]
>  snd_seq_oss_midi_reset+0x44b/0x700 sound/core/seq/oss/seq_oss_midi.c:481
>  snd_seq_oss_synth_reset+0x398/0x980 sound/core/seq/oss/seq_oss_synth.c:416
>  snd_seq_oss_reset+0x6c/0x260 sound/core/seq/oss/seq_oss_init.c:448
>  snd_seq_oss_release+0x71/0x120 sound/core/seq/oss/seq_oss_init.c:425
>  odev_release+0x52/0x70 sound/core/seq/oss/seq_oss.c:153
>  __fput+0x333/0x7f0 fs/file_table.c:210
>  ____fput+0x15/0x20 fs/file_table.c:244
>  task_work_run+0x199/0x270 kernel/task_work.c:112
>  exit_task_work include/linux/task_work.h:21 [inline]
>  do_exit+0xa52/0x1b40 kernel/exit.c:865
>  do_group_exit+0x149/0x400 kernel/exit.c:968
>  SYSC_exit_group kernel/exit.c:979 [inline]
>  SyS_exit_group+0x1d/0x20 kernel/exit.c:977
>  entry_SYSCALL_64_fastpath+0x1f/0xbe
> RIP: 0033:0x442c58
> RSP: 002b:00007ffd15d4f8d8 EFLAGS: 00000246 ORIG_RAX: 00000000000000e7
> RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 0000000000442c58
> RDX: 0000000000000000 RSI: 000000000000003c RDI: 0000000000000000
> RBP: 0000000000000082 R08: 00000000000000e7 R09: ffffffffffffffd0
> R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000401ca0
> R13: 0000000000401d30 R14

I've just re-reproduced this on upstream
15f859ae5c43c7f0a064ed92d33f7a5bc5de6de0 (Oct 26):

============================================
WARNING: possible recursive locking detected
4.14.0-rc6+ #10 Not tainted
--------------------------------------------
a.out/3062 is trying to acquire lock:
 (&grp->list_mutex){++++}, at: [<ffffffff83d28879>]
deliver_to_subscribers sound/core/seq/seq_clientmgr.c:666 [inline]
 (&grp->list_mutex){++++}, at: [<ffffffff83d28879>]
snd_seq_deliver_event+0x279/0x790 sound/core/seq/seq_clientmgr.c:807

but task is already holding lock:
 (&grp->list_mutex){++++}, at: [<ffffffff83d28879>]
deliver_to_subscribers sound/core/seq/seq_clientmgr.c:666 [inline]
 (&grp->list_mutex){++++}, at: [<ffffffff83d28879>]
snd_seq_deliver_event+0x279/0x790 sound/core/seq/seq_clientmgr.c:807

other info that might help us debug this:
 Possible unsafe locking scenario:

       CPU0
       ----
  lock(&grp->list_mutex);
  lock(&grp->list_mutex);

 *** DEADLOCK ***

 May be due to missing lock nesting notation

2 locks held by a.out/3062:
 #0:  (register_mutex#4){+.+.}, at: [<ffffffff83d3b5da>]
odev_release+0x4a/0x70 sound/core/seq/oss/seq_oss.c:152
 #1:  (&grp->list_mutex){++++}, at: [<ffffffff83d28879>]
deliver_to_subscribers sound/core/seq/seq_clientmgr.c:666 [inline]
 #1:  (&grp->list_mutex){++++}, at: [<ffffffff83d28879>]
snd_seq_deliver_event+0x279/0x790 sound/core/seq/seq_clientmgr.c:807

stack backtrace:
CPU: 0 PID: 3062 Comm: a.out Not tainted 4.14.0-rc6+ #10
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Bochs 01/01/2011
Call Trace:
 __dump_stack lib/dump_stack.c:16 [inline]
 dump_stack+0x194/0x257 lib/dump_stack.c:52
 print_deadlock_bug kernel/locking/lockdep.c:1797 [inline]
 check_deadlock kernel/locking/lockdep.c:1844 [inline]
 validate_chain kernel/locking/lockdep.c:2445 [inline]
 __lock_acquire+0xed5/0x3d50 kernel/locking/lockdep.c:3490
 lock_acquire+0x1d5/0x580 kernel/locking/lockdep.c:3994
 down_read+0x96/0x150 kernel/locking/rwsem.c:23
 deliver_to_subscribers sound/core/seq/seq_clientmgr.c:666 [inline]
 snd_seq_deliver_event+0x279/0x790 sound/core/seq/seq_clientmgr.c:807
 snd_seq_kernel_client_dispatch+0x11e/0x150 sound/core/seq/seq_clientmgr.c:2313
 dummy_input+0x2c4/0x400 sound/core/seq/seq_dummy.c:104
 snd_seq_deliver_single_event.constprop.11+0x2fb/0x940
sound/core/seq/seq_clientmgr.c:621
 deliver_to_subscribers sound/core/seq/seq_clientmgr.c:676 [inline]
 snd_seq_deliver_event+0x318/0x790 sound/core/seq/seq_clientmgr.c:807
 snd_seq_kernel_client_dispatch+0x11e/0x150 sound/core/seq/seq_clientmgr.c:2313
 dummy_input+0x2c4/0x400 sound/core/seq/seq_dummy.c:104
 snd_seq_deliver_single_event.constprop.11+0x2fb/0x940
sound/core/seq/seq_clientmgr.c:621
 snd_seq_deliver_event+0x12c/0x790 sound/core/seq/seq_clientmgr.c:818
 snd_seq_kernel_client_dispatch+0x11e/0x150 sound/core/seq/seq_clientmgr.c:2313
 snd_seq_oss_dispatch sound/core/seq/oss/seq_oss_device.h:150 [inline]
 snd_seq_oss_midi_reset+0x44b/0x700 sound/core/seq/oss/seq_oss_midi.c:481
 snd_seq_oss_synth_reset+0x398/0x980 sound/core/seq/oss/seq_oss_synth.c:416
 snd_seq_oss_reset+0x6c/0x260 sound/core/seq/oss/seq_oss_init.c:448
 snd_seq_oss_release+0x71/0x120 sound/core/seq/oss/seq_oss_init.c:425
 odev_release+0x52/0x70 sound/core/seq/oss/seq_oss.c:153
 __fput+0x327/0x7e0 fs/file_table.c:210
 ____fput+0x15/0x20 fs/file_table.c:244
 task_work_run+0x199/0x270 kernel/task_work.c:112
 exit_task_work include/linux/task_work.h:21 [inline]
 do_exit+0x9b5/0x1ad0 kernel/exit.c:865
 do_group_exit+0x149/0x400 kernel/exit.c:968
 SYSC_exit_group kernel/exit.c:979 [inline]
 SyS_exit_group+0x1d/0x20 kernel/exit.c:977
 entry_SYSCALL_64_fastpath+0x1f/0xbe
RIP: 0033:0x437b99
RSP: 002b:00007ffe1b782328 EFLAGS: 00000246 ORIG_RAX: 00000000000000e7
RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 0000000000437b99
RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
RBP: 0000000000000082 R08: 000000000000003c R09: 00000000000000e7
R10: ffffffffffffffc0 R11: 0000000000000246 R12: 0000000000000000
R13: 0000000000401c00 R14: 0000000000401c90 R15: 0000000000000000




> ---
> This bug is generated by a dumb bot. It may contain errors.
> See https://goo.gl/tpsmEJ for details.
> Direct all questions to syzkaller at googlegroups.com.
>
> syzbot will keep track of this bug report.
> Once a fix for this bug is committed, please reply to this email with:
> #syz fix: exact-commit-title
> To mark this as a duplicate of another syzbot report, please reply with:
> #syz dup: exact-subject-of-another-report
> If it's a one-off invalid bug report, please reply with:
> #syz invalid
> Note: if the crash happens again, it will cause creation of a new bug
> report.
>
> --
> You received this message because you are subscribed to the Google Groups
> "syzkaller-bugs" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to syzkaller-bugs+unsubscribe at googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/syzkaller-bugs/001a114089d614a0f4055c82d022%40google.com.
> For more options, visit https://groups.google.com/d/optout.


More information about the Alsa-devel mailing list