| From fb61cf1b91c119f3c056bc1d9d1d7fc535c923f2 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 9 Jan 2019 23:03:25 -0500 |
| Subject: locking/lockdep: Add debug_locks check in __lock_downgrade() |
| |
| From: Waiman Long <longman@redhat.com> |
| |
| [ Upstream commit 513e1073d52e55b8024b4f238a48de7587c64ccf ] |
| |
| Tetsuo Handa had reported he saw an incorrect "downgrading a read lock" |
| warning right after a previous lockdep warning. It is likely that the |
| previous warning turned off lock debugging causing the lockdep to have |
| inconsistency states leading to the lock downgrade warning. |
| |
| Fix that by add a check for debug_locks at the beginning of |
| __lock_downgrade(). |
| |
| Reported-by: Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp> |
| Reported-by: syzbot+53383ae265fb161ef488@syzkaller.appspotmail.com |
| Signed-off-by: Waiman Long <longman@redhat.com> |
| Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> |
| Cc: Andrew Morton <akpm@linux-foundation.org> |
| Cc: Linus Torvalds <torvalds@linux-foundation.org> |
| Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com> |
| Cc: Peter Zijlstra <peterz@infradead.org> |
| Cc: Thomas Gleixner <tglx@linutronix.de> |
| Cc: Will Deacon <will.deacon@arm.com> |
| Link: https://lkml.kernel.org/r/1547093005-26085-1-git-send-email-longman@redhat.com |
| Signed-off-by: Ingo Molnar <mingo@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| kernel/locking/lockdep.c | 3 +++ |
| 1 file changed, 3 insertions(+) |
| |
| diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c |
| index 4b27aaffdf352..d7f425698a4a1 100644 |
| --- a/kernel/locking/lockdep.c |
| +++ b/kernel/locking/lockdep.c |
| @@ -3446,6 +3446,9 @@ __lock_set_class(struct lockdep_map *lock, const char *name, |
| unsigned int depth; |
| int i; |
| |
| + if (unlikely(!debug_locks)) |
| + return 0; |
| + |
| depth = curr->lockdep_depth; |
| /* |
| * This function is about (re)setting the class of a held lock, |
| -- |
| 2.20.1 |
| |