Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e7b0a61b authored by Paul E. McKenney's avatar Paul E. McKenney Committed by Ingo Molnar
Browse files

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: default avatarPaul 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: default avatarIngo Molnar <mingo@elte.hu>
parent 96be753a
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -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;


+3 −1
Original line number Original line Diff line number Diff line
@@ -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]);