Merge tag 'v3.10.108' into update
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / security / keys / encrypted-keys / encrypted.c
index 9e1e005c75967d497831fb67146020aeed4bc4a8..b7d7cffe73493fd5577f3ca05d2ae19d08beaac2 100644 (file)
@@ -315,6 +315,13 @@ static struct key *request_user_key(const char *master_desc, u8 **master_key,
 
        down_read(&ukey->sem);
        upayload = ukey->payload.data;
+       if (!upayload) {
+               /* key was revoked before we acquired its semaphore */
+               up_read(&ukey->sem);
+               key_put(ukey);
+               ukey = ERR_PTR(-EKEYREVOKED);
+               goto error;
+       }
        *master_key = upayload->data;
        *master_keylen = upayload->datalen;
 error:
@@ -428,7 +435,7 @@ static int init_blkcipher_desc(struct blkcipher_desc *desc, const u8 *key,
 static struct key *request_master_key(struct encrypted_key_payload *epayload,
                                      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)) {
@@ -1018,10 +1025,13 @@ static int __init init_encrypted(void)
        ret = encrypted_shash_alloc();
        if (ret < 0)
                return ret;
+       ret = aes_get_sizes();
+       if (ret < 0)
+               goto out;
        ret = register_key_type(&key_type_encrypted);
        if (ret < 0)
                goto out;
-       return aes_get_sizes();
+       return 0;
 out:
        encrypted_shash_release();
        return ret;