Merge tag 'ecryptfs-3.12-rc1-crypt-ctx' of git://git.kernel.org/pub/scm/linux/kernel/git/tyhicks/ecryptfs
Pull eCryptfs fixes from Tyler Hicks: "Two small fixes to the code that initializes the per-file crypto contexts" * tag 'ecryptfs-3.12-rc1-crypt-ctx' of git://git.kernel.org/pub/scm/linux/kernel/git/tyhicks/ecryptfs: ecryptfs: avoid ctx initialization race ecryptfs: remove check for if an array is NULL
This commit is contained in:
@@ -609,39 +609,35 @@ int ecryptfs_init_crypt_ctx(struct ecryptfs_crypt_stat *crypt_stat)
|
|||||||
char *full_alg_name;
|
char *full_alg_name;
|
||||||
int rc = -EINVAL;
|
int rc = -EINVAL;
|
||||||
|
|
||||||
if (!crypt_stat->cipher) {
|
|
||||||
ecryptfs_printk(KERN_ERR, "No cipher specified\n");
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
ecryptfs_printk(KERN_DEBUG,
|
ecryptfs_printk(KERN_DEBUG,
|
||||||
"Initializing cipher [%s]; strlen = [%d]; "
|
"Initializing cipher [%s]; strlen = [%d]; "
|
||||||
"key_size_bits = [%zd]\n",
|
"key_size_bits = [%zd]\n",
|
||||||
crypt_stat->cipher, (int)strlen(crypt_stat->cipher),
|
crypt_stat->cipher, (int)strlen(crypt_stat->cipher),
|
||||||
crypt_stat->key_size << 3);
|
crypt_stat->key_size << 3);
|
||||||
|
mutex_lock(&crypt_stat->cs_tfm_mutex);
|
||||||
if (crypt_stat->tfm) {
|
if (crypt_stat->tfm) {
|
||||||
rc = 0;
|
rc = 0;
|
||||||
goto out;
|
goto out_unlock;
|
||||||
}
|
}
|
||||||
mutex_lock(&crypt_stat->cs_tfm_mutex);
|
|
||||||
rc = ecryptfs_crypto_api_algify_cipher_name(&full_alg_name,
|
rc = ecryptfs_crypto_api_algify_cipher_name(&full_alg_name,
|
||||||
crypt_stat->cipher, "cbc");
|
crypt_stat->cipher, "cbc");
|
||||||
if (rc)
|
if (rc)
|
||||||
goto out_unlock;
|
goto out_unlock;
|
||||||
crypt_stat->tfm = crypto_alloc_ablkcipher(full_alg_name, 0, 0);
|
crypt_stat->tfm = crypto_alloc_ablkcipher(full_alg_name, 0, 0);
|
||||||
kfree(full_alg_name);
|
|
||||||
if (IS_ERR(crypt_stat->tfm)) {
|
if (IS_ERR(crypt_stat->tfm)) {
|
||||||
rc = PTR_ERR(crypt_stat->tfm);
|
rc = PTR_ERR(crypt_stat->tfm);
|
||||||
crypt_stat->tfm = NULL;
|
crypt_stat->tfm = NULL;
|
||||||
ecryptfs_printk(KERN_ERR, "cryptfs: init_crypt_ctx(): "
|
ecryptfs_printk(KERN_ERR, "cryptfs: init_crypt_ctx(): "
|
||||||
"Error initializing cipher [%s]\n",
|
"Error initializing cipher [%s]\n",
|
||||||
crypt_stat->cipher);
|
full_alg_name);
|
||||||
goto out_unlock;
|
goto out_free;
|
||||||
}
|
}
|
||||||
crypto_ablkcipher_set_flags(crypt_stat->tfm, CRYPTO_TFM_REQ_WEAK_KEY);
|
crypto_ablkcipher_set_flags(crypt_stat->tfm, CRYPTO_TFM_REQ_WEAK_KEY);
|
||||||
rc = 0;
|
rc = 0;
|
||||||
|
out_free:
|
||||||
|
kfree(full_alg_name);
|
||||||
out_unlock:
|
out_unlock:
|
||||||
mutex_unlock(&crypt_stat->cs_tfm_mutex);
|
mutex_unlock(&crypt_stat->cs_tfm_mutex);
|
||||||
out:
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user