diff options
Diffstat (limited to 'security/keys/key.c')
| -rw-r--r-- | security/keys/key.c | 22 | 
1 files changed, 22 insertions, 0 deletions
diff --git a/security/keys/key.c b/security/keys/key.c index dc628941ecd..c9bf66ac36e 100644 --- a/security/keys/key.c +++ b/security/keys/key.c @@ -955,6 +955,28 @@ void key_revoke(struct key *key)  EXPORT_SYMBOL(key_revoke);  /** + * key_invalidate - Invalidate a key. + * @key: The key to be invalidated. + * + * Mark a key as being invalidated and have it cleaned up immediately.  The key + * is ignored by all searches and other operations from this point. + */ +void key_invalidate(struct key *key) +{ +	kenter("%d", key_serial(key)); + +	key_check(key); + +	if (!test_bit(KEY_FLAG_INVALIDATED, &key->flags)) { +		down_write_nested(&key->sem, 1); +		if (!test_and_set_bit(KEY_FLAG_INVALIDATED, &key->flags)) +			key_schedule_gc_links(); +		up_write(&key->sem); +	} +} +EXPORT_SYMBOL(key_invalidate); + +/**   * register_key_type - Register a type of key.   * @ktype: The new key type.   *  |