diff options
Diffstat (limited to 'security/keys/permission.c')
-rw-r--r-- | security/keys/permission.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/security/keys/permission.c b/security/keys/permission.c index 732cc0beffdf..a72b4dd70c8a 100644 --- a/security/keys/permission.c +++ b/security/keys/permission.c | |||
@@ -88,7 +88,8 @@ EXPORT_SYMBOL(key_task_permission); | |||
88 | */ | 88 | */ |
89 | int key_validate(const struct key *key) | 89 | int key_validate(const struct key *key) |
90 | { | 90 | { |
91 | unsigned long flags = key->flags; | 91 | unsigned long flags = READ_ONCE(key->flags); |
92 | time_t expiry = READ_ONCE(key->expiry); | ||
92 | 93 | ||
93 | if (flags & (1 << KEY_FLAG_INVALIDATED)) | 94 | if (flags & (1 << KEY_FLAG_INVALIDATED)) |
94 | return -ENOKEY; | 95 | return -ENOKEY; |
@@ -99,9 +100,9 @@ int key_validate(const struct key *key) | |||
99 | return -EKEYREVOKED; | 100 | return -EKEYREVOKED; |
100 | 101 | ||
101 | /* check it hasn't expired */ | 102 | /* check it hasn't expired */ |
102 | if (key->expiry) { | 103 | if (expiry) { |
103 | struct timespec now = current_kernel_time(); | 104 | struct timespec now = current_kernel_time(); |
104 | if (now.tv_sec >= key->expiry) | 105 | if (now.tv_sec >= expiry) |
105 | return -EKEYEXPIRED; | 106 | return -EKEYEXPIRED; |
106 | } | 107 | } |
107 | 108 | ||