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;
|
goto dont_gc;
|
||||||
|
|
||||||
/* scan the keyring looking for dead keys */
|
/* 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)
|
if (!klist)
|
||||||
goto dont_gc;
|
goto dont_gc;
|
||||||
|
|
||||||
|
|
|
@ -151,7 +151,9 @@ static void keyring_destroy(struct key *keyring)
|
||||||
write_unlock(&keyring_name_lock);
|
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) {
|
if (klist) {
|
||||||
for (loop = klist->nkeys - 1; loop >= 0; loop--)
|
for (loop = klist->nkeys - 1; loop >= 0; loop--)
|
||||||
key_put(klist->keys[loop]);
|
key_put(klist->keys[loop]);
|
||||||
|
|
Loading…
Reference in New Issue