diff options
Diffstat (limited to 'security/keys/encrypted-keys/encrypted.c')
| -rw-r--r-- | security/keys/encrypted-keys/encrypted.c | 16 | 
1 files changed, 9 insertions, 7 deletions
diff --git a/security/keys/encrypted-keys/encrypted.c b/security/keys/encrypted-keys/encrypted.c index 2d1bb8af769..9e1e005c759 100644 --- a/security/keys/encrypted-keys/encrypted.c +++ b/security/keys/encrypted-keys/encrypted.c @@ -773,8 +773,8 @@ static int encrypted_init(struct encrypted_key_payload *epayload,   *   * On success, return 0. Otherwise return errno.   */ -static int encrypted_instantiate(struct key *key, const void *data, -				 size_t datalen) +static int encrypted_instantiate(struct key *key, +				 struct key_preparsed_payload *prep)  {  	struct encrypted_key_payload *epayload = NULL;  	char *datablob = NULL; @@ -782,16 +782,17 @@ static int encrypted_instantiate(struct key *key, const void *data,  	char *master_desc = NULL;  	char *decrypted_datalen = NULL;  	char *hex_encoded_iv = NULL; +	size_t datalen = prep->datalen;  	int ret; -	if (datalen <= 0 || datalen > 32767 || !data) +	if (datalen <= 0 || datalen > 32767 || !prep->data)  		return -EINVAL;  	datablob = kmalloc(datalen + 1, GFP_KERNEL);  	if (!datablob)  		return -ENOMEM;  	datablob[datalen] = 0; -	memcpy(datablob, data, datalen); +	memcpy(datablob, prep->data, datalen);  	ret = datablob_parse(datablob, &format, &master_desc,  			     &decrypted_datalen, &hex_encoded_iv);  	if (ret < 0) @@ -834,16 +835,17 @@ static void encrypted_rcu_free(struct rcu_head *rcu)   *   * On success, return 0. Otherwise return errno.   */ -static int encrypted_update(struct key *key, const void *data, size_t datalen) +static int encrypted_update(struct key *key, struct key_preparsed_payload *prep)  {  	struct encrypted_key_payload *epayload = key->payload.data;  	struct encrypted_key_payload *new_epayload;  	char *buf;  	char *new_master_desc = NULL;  	const char *format = NULL; +	size_t datalen = prep->datalen;  	int ret = 0; -	if (datalen <= 0 || datalen > 32767 || !data) +	if (datalen <= 0 || datalen > 32767 || !prep->data)  		return -EINVAL;  	buf = kmalloc(datalen + 1, GFP_KERNEL); @@ -851,7 +853,7 @@ static int encrypted_update(struct key *key, const void *data, size_t datalen)  		return -ENOMEM;  	buf[datalen] = 0; -	memcpy(buf, data, datalen); +	memcpy(buf, prep->data, datalen);  	ret = datablob_parse(buf, &format, &new_master_desc, NULL, NULL);  	if (ret < 0)  		goto out;  |