security: Apply lockdep-based checking to rcu_dereference() uses
Apply lockdep-ified RCU primitives to key_gc_keyring() and keyring_destroy(). Cc: David Howells <dhowells@redhat.com> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Cc: laijs@cn.fujitsu.com Cc: dipankar@in.ibm.com Cc: mathieu.desnoyers@polymtl.ca Cc: josh@joshtriplett.org Cc: dvhltc@us.ibm.com Cc: niv@us.ibm.com Cc: peterz@infradead.org Cc: rostedt@goodmis.org Cc: Valdis.Kletnieks@vt.edu Cc: dhowells@redhat.com LKML-Reference: <1266887105-1528-12-git-send-email-paulmck@linux.vnet.ibm.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
96be753af9
commit
e7b0a61b79
|
@ -77,7 +77,8 @@ static bool key_gc_keyring(struct key *keyring, time_t limit)
|
|||
goto dont_gc;
|
||||
|
||||
/* scan the keyring looking for dead keys */
|
||||
klist = rcu_dereference(keyring->payload.subscriptions);
|
||||
klist = rcu_dereference_check(keyring->payload.subscriptions,
|
||||
lockdep_is_held(&key_serial_lock));
|
||||
if (!klist)
|
||||
goto dont_gc;
|
||||
|
||||
|
|
|
@ -151,7 +151,9 @@ static void keyring_destroy(struct key *keyring)
|
|||
write_unlock(&keyring_name_lock);
|
||||
}
|
||||
|
||||
klist = rcu_dereference(keyring->payload.subscriptions);
|
||||
klist = rcu_dereference_check(keyring->payload.subscriptions,
|
||||
rcu_read_lock_held() ||
|
||||
atomic_read(&keyring->usage) == 0);
|
||||
if (klist) {
|
||||
for (loop = klist->nkeys - 1; loop >= 0; loop--)
|
||||
key_put(klist->keys[loop]);
|
||||
|
|
Loading…
Reference in New Issue