summaryrefslogtreecommitdiff
path: root/fs/ecryptfs/crypto.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/ecryptfs/crypto.c')
-rw-r--r--fs/ecryptfs/crypto.c68
1 files changed, 26 insertions, 42 deletions
diff --git a/fs/ecryptfs/crypto.c b/fs/ecryptfs/crypto.c
index 3b59346d68c5..e67119b6029c 100644
--- a/fs/ecryptfs/crypto.c
+++ b/fs/ecryptfs/crypto.c
@@ -49,30 +49,20 @@ void ecryptfs_from_hex(char *dst, char *src, int dst_size)
}
static int ecryptfs_crypto_api_algify_cipher_name(char **algified_name,
- char *cipher_name,
- char *chaining_modifier)
+ const char *cipher_name,
+ const char *chaining_modifier)
{
- int cipher_name_len = strlen(cipher_name);
- int chaining_modifier_len = strlen(chaining_modifier);
- int algified_name_len;
- int rc;
+ (*algified_name) = kasprintf(GFP_KERNEL, "%s(%s)", chaining_modifier,
+ cipher_name);
+ if (!(*algified_name))
+ return -ENOMEM;
- algified_name_len = (chaining_modifier_len + cipher_name_len + 3);
- (*algified_name) = kmalloc(algified_name_len, GFP_KERNEL);
- if (!(*algified_name)) {
- rc = -ENOMEM;
- goto out;
- }
- snprintf((*algified_name), algified_name_len, "%s(%s)",
- chaining_modifier, cipher_name);
- rc = 0;
-out:
- return rc;
+ return 0;
}
/**
* ecryptfs_derive_iv
- * @iv: destination for the derived iv vale
+ * @iv: destination for the derived iv value
* @crypt_stat: Pointer to crypt_stat struct for the current inode
* @offset: Offset of the extent whose IV we are to derive
*
@@ -89,10 +79,6 @@ void ecryptfs_derive_iv(char *iv, struct ecryptfs_crypt_stat *crypt_stat,
ecryptfs_printk(KERN_DEBUG, "root iv:\n");
ecryptfs_dump_hex(crypt_stat->root_iv, crypt_stat->iv_bytes);
}
- /* TODO: It is probably secure to just cast the least
- * significant bits of the root IV into an unsigned long and
- * add the offset to that rather than go through all this
- * hashing business. -Halcrow */
memcpy(src, crypt_stat->root_iv, crypt_stat->iv_bytes);
memset((src + crypt_stat->iv_bytes), 0, 16);
snprintf((src + crypt_stat->iv_bytes), 16, "%lld", offset);
@@ -1211,7 +1197,7 @@ static int ecryptfs_read_headers_virt(char *page_virt,
} else
set_default_header_data(crypt_stat);
rc = ecryptfs_parse_packet_set(crypt_stat, (page_virt + offset),
- ecryptfs_dentry);
+ PAGE_SIZE - offset, ecryptfs_dentry);
out:
return rc;
}
@@ -1313,7 +1299,7 @@ int ecryptfs_read_metadata(struct dentry *ecryptfs_dentry)
rc = ecryptfs_read_xattr_region(page_virt, ecryptfs_inode);
if (rc) {
printk(KERN_DEBUG "Valid eCryptfs headers not found in "
- "file header region or xattr region, inode %lu\n",
+ "file header region or xattr region, inode %llu\n",
ecryptfs_inode->i_ino);
rc = -EINVAL;
goto out;
@@ -1323,7 +1309,7 @@ int ecryptfs_read_metadata(struct dentry *ecryptfs_dentry)
ECRYPTFS_DONT_VALIDATE_HEADER_SIZE);
if (rc) {
printk(KERN_DEBUG "Valid eCryptfs headers not found in "
- "file xattr region either, inode %lu\n",
+ "file xattr region either, inode %llu\n",
ecryptfs_inode->i_ino);
rc = -EINVAL;
}
@@ -1335,7 +1321,7 @@ int ecryptfs_read_metadata(struct dentry *ecryptfs_dentry)
"crypto metadata only in the extended attribute "
"region, but eCryptfs was mounted without "
"xattr support enabled. eCryptfs will not treat "
- "this like an encrypted file, inode %lu\n",
+ "this like an encrypted file, inode %llu\n",
ecryptfs_inode->i_ino);
rc = -EINVAL;
}
@@ -1376,9 +1362,9 @@ ecryptfs_encrypt_filename(struct ecryptfs_filename *filename,
mount_crypt_stat, NULL,
filename->filename_size);
if (rc) {
- printk(KERN_ERR "%s: Error attempting to get packet "
- "size for tag 72; rc = [%d]\n", __func__,
- rc);
+ ecryptfs_printk(KERN_ERR,
+ "Error attempting to get packet size for tag 70; rc = [%d]\n",
+ rc);
filename->encrypted_filename_size = 0;
goto out;
}
@@ -1802,8 +1788,9 @@ int ecryptfs_encrypt_and_encode_filename(
filename->filename_size = name_size;
rc = ecryptfs_encrypt_filename(filename, mount_crypt_stat);
if (rc) {
- printk(KERN_ERR "%s: Error attempting to encrypt "
- "filename; rc = [%d]\n", __func__, rc);
+ ecryptfs_printk(KERN_ERR,
+ "Error attempting to encrypt filename; rc = [%d]\n",
+ rc);
kfree(filename);
goto out;
}
@@ -1811,9 +1798,8 @@ int ecryptfs_encrypt_and_encode_filename(
NULL, &encoded_name_no_prefix_size,
filename->encrypted_filename,
filename->encrypted_filename_size);
- if (mount_crypt_stat
- && (mount_crypt_stat->flags
- & ECRYPTFS_GLOBAL_ENCFN_USE_MOUNT_FNEK))
+ if (mount_crypt_stat->flags
+ & ECRYPTFS_GLOBAL_ENCFN_USE_MOUNT_FNEK)
(*encoded_name_size) =
(ECRYPTFS_FNEK_ENCRYPTED_FILENAME_PREFIX_SIZE
+ encoded_name_no_prefix_size);
@@ -1828,9 +1814,8 @@ int ecryptfs_encrypt_and_encode_filename(
kfree(filename);
goto out;
}
- if (mount_crypt_stat
- && (mount_crypt_stat->flags
- & ECRYPTFS_GLOBAL_ENCFN_USE_MOUNT_FNEK)) {
+ if (mount_crypt_stat->flags
+ & ECRYPTFS_GLOBAL_ENCFN_USE_MOUNT_FNEK) {
memcpy((*encoded_name),
ECRYPTFS_FNEK_ENCRYPTED_FILENAME_PREFIX,
ECRYPTFS_FNEK_ENCRYPTED_FILENAME_PREFIX_SIZE);
@@ -1848,9 +1833,9 @@ int ecryptfs_encrypt_and_encode_filename(
rc = -EOPNOTSUPP;
}
if (rc) {
- printk(KERN_ERR "%s: Error attempting to encode "
- "encrypted filename; rc = [%d]\n", __func__,
- rc);
+ ecryptfs_printk(KERN_ERR,
+ "Error attempting to encode encrypted filename; rc = [%d]\n",
+ rc);
kfree((*encoded_name));
(*encoded_name) = NULL;
(*encoded_name_size) = 0;
@@ -1925,8 +1910,7 @@ int ecryptfs_decode_and_decrypt_filename(char **plaintext_name,
decoded_name_size);
if (rc) {
ecryptfs_printk(KERN_DEBUG,
- "%s: Could not parse tag 70 packet from filename\n",
- __func__);
+ "Could not parse tag 70 packet from filename\n");
goto out_free;
}
} else {