| From 1f20f9ff57ca23b9f5502fca85ce3977e8496cb1 Mon Sep 17 00:00:00 2001 |
| From: Takashi Iwai <tiwai@suse.de> |
| Date: Sun, 29 Oct 2017 11:10:43 +0100 |
| Subject: ALSA: seq: Fix nested rwsem annotation for lockdep splat |
| |
| From: Takashi Iwai <tiwai@suse.de> |
| |
| commit 1f20f9ff57ca23b9f5502fca85ce3977e8496cb1 upstream. |
| |
| syzkaller reported the lockdep splat due to the possible deadlock of |
| grp->list_mutex of each sequencer client object. Actually this is |
| rather a false-positive report due to the missing nested lock |
| annotations. The sequencer client may deliver the event directly to |
| another client which takes another own lock. |
| |
| For addressing this issue, this patch replaces the simple down_read() |
| with down_read_nested(). As a lock subclass, the already existing |
| "hop" can be re-used, which indicates the depth of the call. |
| |
| Reference: http://lkml.kernel.org/r/089e082686ac9b482e055c832617@google.com |
| Reported-by: syzbot <bot+7feb8de6b4d6bf810cf098bef942cc387e79d0ad@syzkaller.appspotmail.com> |
| Reported-by: Dmitry Vyukov <dvyukov@google.com> |
| Signed-off-by: Takashi Iwai <tiwai@suse.de> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| sound/core/seq/seq_clientmgr.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/sound/core/seq/seq_clientmgr.c |
| +++ b/sound/core/seq/seq_clientmgr.c |
| @@ -676,7 +676,7 @@ static int deliver_to_subscribers(struct |
| if (atomic) |
| read_lock(&grp->list_lock); |
| else |
| - down_read(&grp->list_mutex); |
| + down_read_nested(&grp->list_mutex, hop); |
| list_for_each_entry(subs, &grp->list_head, src_list) { |
| /* both ports ready? */ |
| if (atomic_read(&subs->ref_count) != 2) |