|
@@ -84,11 +84,16 @@ struct ecryptfs_page_crypt_context {
|
|
|
static inline struct ecryptfs_auth_tok *
|
|
|
ecryptfs_get_encrypted_key_payload_data(struct key *key)
|
|
|
{
|
|
|
- if (key->type == &key_type_encrypted)
|
|
|
- return (struct ecryptfs_auth_tok *)
|
|
|
- (&((struct encrypted_key_payload *)key->payload.data[0])->payload_data);
|
|
|
- else
|
|
|
+ struct encrypted_key_payload *payload;
|
|
|
+
|
|
|
+ if (key->type != &key_type_encrypted)
|
|
|
return NULL;
|
|
|
+
|
|
|
+ payload = key->payload.data[0];
|
|
|
+ if (!payload)
|
|
|
+ return ERR_PTR(-EKEYREVOKED);
|
|
|
+
|
|
|
+ return (struct ecryptfs_auth_tok *)payload->payload_data;
|
|
|
}
|
|
|
|
|
|
static inline struct key *ecryptfs_get_encrypted_key(char *sig)
|
|
@@ -114,12 +119,17 @@ static inline struct ecryptfs_auth_tok *
|
|
|
ecryptfs_get_key_payload_data(struct key *key)
|
|
|
{
|
|
|
struct ecryptfs_auth_tok *auth_tok;
|
|
|
+ struct user_key_payload *ukp;
|
|
|
|
|
|
auth_tok = ecryptfs_get_encrypted_key_payload_data(key);
|
|
|
- if (!auth_tok)
|
|
|
- return (struct ecryptfs_auth_tok *)user_key_payload_locked(key)->data;
|
|
|
- else
|
|
|
+ if (auth_tok)
|
|
|
return auth_tok;
|
|
|
+
|
|
|
+ ukp = user_key_payload_locked(key);
|
|
|
+ if (!ukp)
|
|
|
+ return ERR_PTR(-EKEYREVOKED);
|
|
|
+
|
|
|
+ return (struct ecryptfs_auth_tok *)ukp->data;
|
|
|
}
|
|
|
|
|
|
#define ECRYPTFS_MAX_KEYSET_SIZE 1024
|