mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-25 13:14:07 +08:00
KEYS: Load key expiry time atomically in keyring_search_iterator()
Similar to the case for key_validate(), we should load the key ->expiry once atomically in keyring_search_iterator(), since it can be changed concurrently with the flags whenever the key semaphore isn't held. Signed-off-by: Eric Biggers <ebiggers@google.com> Signed-off-by: David Howells <dhowells@redhat.com>
This commit is contained in:
parent
1823d475a5
commit
9d6c8711b6
@ -566,6 +566,8 @@ static int keyring_search_iterator(const void *object, void *iterator_data)
|
|||||||
|
|
||||||
/* skip invalidated, revoked and expired keys */
|
/* skip invalidated, revoked and expired keys */
|
||||||
if (ctx->flags & KEYRING_SEARCH_DO_STATE_CHECK) {
|
if (ctx->flags & KEYRING_SEARCH_DO_STATE_CHECK) {
|
||||||
|
time_t expiry = READ_ONCE(key->expiry);
|
||||||
|
|
||||||
if (kflags & ((1 << KEY_FLAG_INVALIDATED) |
|
if (kflags & ((1 << KEY_FLAG_INVALIDATED) |
|
||||||
(1 << KEY_FLAG_REVOKED))) {
|
(1 << KEY_FLAG_REVOKED))) {
|
||||||
ctx->result = ERR_PTR(-EKEYREVOKED);
|
ctx->result = ERR_PTR(-EKEYREVOKED);
|
||||||
@ -573,7 +575,7 @@ static int keyring_search_iterator(const void *object, void *iterator_data)
|
|||||||
goto skipped;
|
goto skipped;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (key->expiry && ctx->now.tv_sec >= key->expiry) {
|
if (expiry && ctx->now.tv_sec >= expiry) {
|
||||||
if (!(ctx->flags & KEYRING_SEARCH_SKIP_EXPIRED))
|
if (!(ctx->flags & KEYRING_SEARCH_SKIP_EXPIRED))
|
||||||
ctx->result = ERR_PTR(-EKEYEXPIRED);
|
ctx->result = ERR_PTR(-EKEYEXPIRED);
|
||||||
kleave(" = %d [expire]", ctx->skipped_ret);
|
kleave(" = %d [expire]", ctx->skipped_ret);
|
||||||
|
Loading…
Reference in New Issue
Block a user