x86, UV: uv_irq.c: Fix all sparse warnings
[sfrench/cifs-2.6.git] / security / keys / keyring.c
index 8ec02746ca993fa697da600757fbcd21b319e2f7..e814d2109f8ef170ea60043fa83b1f37c3e35de1 100644 (file)
@@ -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]);