diff options
Diffstat (limited to 'security/keys/key.c')
-rw-r--r-- | security/keys/key.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/security/keys/key.c b/security/keys/key.c index 7ada8019be1f..06783cffb3af 100644 --- a/security/keys/key.c +++ b/security/keys/key.c | |||
@@ -671,6 +671,26 @@ found_kernel_type: | |||
671 | return ktype; | 671 | return ktype; |
672 | } | 672 | } |
673 | 673 | ||
674 | void key_set_timeout(struct key *key, unsigned timeout) | ||
675 | { | ||
676 | struct timespec now; | ||
677 | time_t expiry = 0; | ||
678 | |||
679 | /* make the changes with the locks held to prevent races */ | ||
680 | down_write(&key->sem); | ||
681 | |||
682 | if (timeout > 0) { | ||
683 | now = current_kernel_time(); | ||
684 | expiry = now.tv_sec + timeout; | ||
685 | } | ||
686 | |||
687 | key->expiry = expiry; | ||
688 | key_schedule_gc(key->expiry + key_gc_delay); | ||
689 | |||
690 | up_write(&key->sem); | ||
691 | } | ||
692 | EXPORT_SYMBOL_GPL(key_set_timeout); | ||
693 | |||
674 | /* | 694 | /* |
675 | * Unlock a key type locked by key_type_lookup(). | 695 | * Unlock a key type locked by key_type_lookup(). |
676 | */ | 696 | */ |