]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - security/keys/encrypted-keys/encrypted.c
KEYS: Differentiate uses of rcu_dereference_key() and user_key_payload()
[linux.git] / security / keys / encrypted-keys / encrypted.c
index 17a06105ccb616ea91aaa5635341136dda1fc915..0010955d7876c2302704020af8b2ffb6010f2c0a 100644 (file)
@@ -314,7 +314,7 @@ static struct key *request_user_key(const char *master_desc, const u8 **master_k
                goto error;
 
        down_read(&ukey->sem);
-       upayload = user_key_payload(ukey);
+       upayload = user_key_payload_locked(ukey);
        *master_key = upayload->data;
        *master_keylen = upayload->datalen;
 error:
@@ -437,7 +437,7 @@ static struct skcipher_request *init_skcipher_req(const u8 *key,
 static struct key *request_master_key(struct encrypted_key_payload *epayload,
                                      const u8 **master_key, size_t *master_keylen)
 {
-       struct key *mkey = NULL;
+       struct key *mkey = ERR_PTR(-EINVAL);
 
        if (!strncmp(epayload->master_desc, KEY_TRUSTED_PREFIX,
                     KEY_TRUSTED_PREFIX_LEN)) {
@@ -926,7 +926,7 @@ static long encrypted_read(const struct key *key, char __user *buffer,
        size_t asciiblob_len;
        int ret;
 
-       epayload = rcu_dereference_key(key);
+       epayload = dereference_key_locked(key);
 
        /* returns the hex encoded iv, encrypted-data, and hmac as ascii */
        asciiblob_len = epayload->datablob_len + ivsize + 1
@@ -985,7 +985,7 @@ static void encrypted_destroy(struct key *key)
        if (!epayload)
                return;
 
-       memset(epayload->decrypted_data, 0, epayload->decrypted_datalen);
+       memzero_explicit(epayload->decrypted_data, epayload->decrypted_datalen);
        kfree(key->payload.data[0]);
 }