From: tip-bot for Peter Zijlstra <a.p.zijlstra@chello.nl>
To: linux-tip-commits@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, hpa@zytor.com, mingo@redhat.com,
a.p.zijlstra@chello.nl, sergey.senozhatsky@gmail.com,
tglx@linutronix.de, mingo@elte.hu
Subject: [tip:core/urgent] lockdep: Fix wrong assumption in match_held_lock
Date: Tue, 9 Aug 2011 14:30:02 GMT [thread overview]
Message-ID: <tip-80e0401e35410a69bfae05b454db8a7187edd6b8@git.kernel.org> (raw)
In-Reply-To: <1312547787.28695.2.camel@twins>
Commit-ID: 80e0401e35410a69bfae05b454db8a7187edd6b8
Gitweb: http://git.kernel.org/tip/80e0401e35410a69bfae05b454db8a7187edd6b8
Author: Peter Zijlstra <a.p.zijlstra@chello.nl>
AuthorDate: Fri, 5 Aug 2011 14:26:17 +0200
Committer: Ingo Molnar <mingo@elte.hu>
CommitDate: Tue, 9 Aug 2011 11:57:35 +0200
lockdep: Fix wrong assumption in match_held_lock
match_held_lock() was assuming it was being called on a lock class
that had already seen usage.
This condition was true for bug-free code using lockdep_assert_held(),
since you're in fact holding the lock when calling it. However the
assumption fails the moment you assume the assertion can fail, which
is the whole point of having the assertion in the first place.
Anyway, now that there's more lockdep_is_held() users, notably
__rcu_dereference_check(), its much easier to trigger this since we
test for a number of locks and we only need to hold any one of them to
be good.
Reported-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1312547787.28695.2.camel@twins
Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
kernel/lockdep.c | 8 +++++++-
1 files changed, 7 insertions(+), 1 deletions(-)
diff --git a/kernel/lockdep.c b/kernel/lockdep.c
index 8c24294..91d67ce 100644
--- a/kernel/lockdep.c
+++ b/kernel/lockdep.c
@@ -3111,7 +3111,13 @@ static int match_held_lock(struct held_lock *hlock, struct lockdep_map *lock)
if (!class)
class = look_up_lock_class(lock, 0);
- if (DEBUG_LOCKS_WARN_ON(!class))
+ /*
+ * If look_up_lock_class() failed to find a class, we're trying
+ * to test if we hold a lock that has never yet been acquired.
+ * Clearly if the lock hasn't been acquired _ever_, we're not
+ * holding it either, so report failure.
+ */
+ if (!class)
return 0;
if (DEBUG_LOCKS_WARN_ON(!hlock->nest_lock))
next parent reply other threads:[~2011-08-09 14:30 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1312547787.28695.2.camel@twins>
2011-08-09 14:30 ` tip-bot for Peter Zijlstra [this message]
2011-08-10 2:58 ` [tip:core/urgent] lockdep: Fix wrong assumption in match_held_lock Yong Zhang
2011-08-10 10:01 ` Peter Zijlstra
2011-08-10 11:45 ` Yong Zhang
2011-08-10 11:48 ` Yong Zhang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=tip-80e0401e35410a69bfae05b454db8a7187edd6b8@git.kernel.org \
--to=a.p.zijlstra@chello.nl \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=mingo@redhat.com \
--cc=sergey.senozhatsky@gmail.com \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox