diff options
Diffstat (limited to 'fs/ecryptfs/ecryptfs_kernel.h')
| -rw-r--r-- | fs/ecryptfs/ecryptfs_kernel.h | 24 | 
1 files changed, 17 insertions, 7 deletions
| diff --git a/fs/ecryptfs/ecryptfs_kernel.h b/fs/ecryptfs/ecryptfs_kernel.h index 9c351bf757b2..3fbc0ff79699 100644 --- a/fs/ecryptfs/ecryptfs_kernel.h +++ b/fs/ecryptfs/ecryptfs_kernel.h @@ -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 |