diff options
Diffstat (limited to 'security')
-rw-r--r-- | security/keys/permission.c | 40 |
1 files changed, 16 insertions, 24 deletions
diff --git a/security/keys/permission.c b/security/keys/permission.c index 5f4c00c0947d..57d96363d7f1 100644 --- a/security/keys/permission.c +++ b/security/keys/permission.c | |||
@@ -91,33 +91,25 @@ EXPORT_SYMBOL(key_task_permission); | |||
91 | * key is invalidated, -EKEYREVOKED if the key's type has been removed or if | 91 | * key is invalidated, -EKEYREVOKED if the key's type has been removed or if |
92 | * the key has been revoked or -EKEYEXPIRED if the key has expired. | 92 | * the key has been revoked or -EKEYEXPIRED if the key has expired. |
93 | */ | 93 | */ |
94 | int key_validate(struct key *key) | 94 | int key_validate(const struct key *key) |
95 | { | 95 | { |
96 | struct timespec now; | ||
97 | unsigned long flags = key->flags; | 96 | unsigned long flags = key->flags; |
98 | int ret = 0; | 97 | |
99 | 98 | if (flags & (1 << KEY_FLAG_INVALIDATED)) | |
100 | if (key) { | 99 | return -ENOKEY; |
101 | ret = -ENOKEY; | 100 | |
102 | if (flags & (1 << KEY_FLAG_INVALIDATED)) | 101 | /* check it's still accessible */ |
103 | goto error; | 102 | if (flags & ((1 << KEY_FLAG_REVOKED) | |
104 | 103 | (1 << KEY_FLAG_DEAD))) | |
105 | /* check it's still accessible */ | 104 | return -EKEYREVOKED; |
106 | ret = -EKEYREVOKED; | 105 | |
107 | if (flags & ((1 << KEY_FLAG_REVOKED) | | 106 | /* check it hasn't expired */ |
108 | (1 << KEY_FLAG_DEAD))) | 107 | if (key->expiry) { |
109 | goto error; | 108 | struct timespec now = current_kernel_time(); |
110 | 109 | if (now.tv_sec >= key->expiry) | |
111 | /* check it hasn't expired */ | 110 | return -EKEYEXPIRED; |
112 | ret = 0; | ||
113 | if (key->expiry) { | ||
114 | now = current_kernel_time(); | ||
115 | if (now.tv_sec >= key->expiry) | ||
116 | ret = -EKEYEXPIRED; | ||
117 | } | ||
118 | } | 111 | } |
119 | 112 | ||
120 | error: | 113 | return 0; |
121 | return ret; | ||
122 | } | 114 | } |
123 | EXPORT_SYMBOL(key_validate); | 115 | EXPORT_SYMBOL(key_validate); |