Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d6a13c17 authored by Michael Halcrow's avatar Michael Halcrow Committed by Linus Torvalds
Browse files

eCryptfs: fix data types



Update data types and add casts in order to avoid potential overflow
issues.

Signed-off-by: default avatarMichael Halcrow <mhalcrow@us.ibm.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent bf12be1c
Loading
Loading
Loading
Loading
+11 −10
Original line number Diff line number Diff line
@@ -149,7 +149,7 @@ static int ecryptfs_crypto_api_algify_cipher_name(char **algified_name,
 * ecryptfs_derive_iv
 * @iv: destination for the derived iv vale
 * @crypt_stat: Pointer to crypt_stat struct for the current inode
 * @offset: Offset of the page whose's iv we are to derive
 * @offset: Offset of the extent whose IV we are to derive
 *
 * Generate the initialization vector from the given root IV and page
 * offset.
@@ -157,7 +157,7 @@ static int ecryptfs_crypto_api_algify_cipher_name(char **algified_name,
 * Returns zero on success; non-zero on error.
 */
static int ecryptfs_derive_iv(char *iv, struct ecryptfs_crypt_stat *crypt_stat,
			      pgoff_t offset)
			      loff_t offset)
{
	int rc = 0;
	char dst[MD5_DIGEST_SIZE];
@@ -173,7 +173,7 @@ static int ecryptfs_derive_iv(char *iv, struct ecryptfs_crypt_stat *crypt_stat,
	 * 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, "%ld", offset);
	snprintf((src + crypt_stat->iv_bytes), 16, "%lld", offset);
	if (unlikely(ecryptfs_verbosity > 0)) {
		ecryptfs_printk(KERN_DEBUG, "source:\n");
		ecryptfs_dump_hex(src, (crypt_stat->iv_bytes + 16));
@@ -497,11 +497,11 @@ static int ecryptfs_encrypt_extent(struct page *enc_extent_page,
				   struct page *page,
				   unsigned long extent_offset)
{
	unsigned long extent_base;
	loff_t extent_base;
	char extent_iv[ECRYPTFS_MAX_IV_BYTES];
	int rc;

	extent_base = (page->index
	extent_base = (((loff_t)page->index)
		       * (PAGE_CACHE_SIZE / crypt_stat->extent_size));
	rc = ecryptfs_derive_iv(extent_iv, crypt_stat,
				(extent_base + extent_offset));
@@ -605,7 +605,8 @@ int ecryptfs_encrypt_page(struct page *page)
			goto out;
		}
		ecryptfs_lower_offset_for_extent(
			&offset, ((page->index * (PAGE_CACHE_SIZE
			&offset, ((((loff_t)page->index)
				   * (PAGE_CACHE_SIZE
				      / crypt_stat->extent_size))
				  + extent_offset), crypt_stat);
		rc = ecryptfs_write_lower(ecryptfs_inode, enc_extent_virt,
@@ -628,11 +629,11 @@ static int ecryptfs_decrypt_extent(struct page *page,
				   struct page *enc_extent_page,
				   unsigned long extent_offset)
{
	unsigned long extent_base;
	loff_t extent_base;
	char extent_iv[ECRYPTFS_MAX_IV_BYTES];
	int rc;

	extent_base = (page->index
	extent_base = (((loff_t)page->index)
		       * (PAGE_CACHE_SIZE / crypt_stat->extent_size));
	rc = ecryptfs_derive_iv(extent_iv, crypt_stat,
				(extent_base + extent_offset));
@@ -1471,7 +1472,7 @@ ecryptfs_write_metadata_to_contents(struct ecryptfs_crypt_stat *crypt_stat,
	while (current_header_page < header_pages) {
		loff_t offset;

		offset = (current_header_page << PAGE_CACHE_SHIFT);
		offset = (((loff_t)current_header_page) << PAGE_CACHE_SHIFT);
		if ((rc = ecryptfs_write_lower(ecryptfs_dentry->d_inode,
					       page_virt, offset,
					       PAGE_CACHE_SIZE))) {
+3 −2
Original line number Diff line number Diff line
@@ -286,7 +286,8 @@ ecryptfs_copy_up_encrypted_with_header(struct page *page,
	int rc = 0;

	while (extent_num_in_page < num_extents_per_page) {
		loff_t view_extent_num = ((page->index * num_extents_per_page)
		loff_t view_extent_num = ((((loff_t)page->index)
					   * num_extents_per_page)
					  + extent_num_in_page);

		if (view_extent_num < crypt_stat->num_header_extents_at_front) {
@@ -706,7 +707,7 @@ static int ecryptfs_commit_write(struct file *file, struct page *page,
				"index [0x%.16x])\n", page->index);
		goto out;
	}
	pos = (page->index << PAGE_CACHE_SHIFT) + to;
	pos = (((loff_t)page->index) << PAGE_CACHE_SHIFT) + to;
	if (pos > i_size_read(ecryptfs_inode)) {
		i_size_write(ecryptfs_inode, pos);
		ecryptfs_printk(KERN_DEBUG, "Expanded file size to "
+7 −4
Original line number Diff line number Diff line
@@ -87,7 +87,8 @@ int ecryptfs_write_lower_page_segment(struct inode *ecryptfs_inode,
	loff_t offset;
	int rc;

	offset = (page_for_lower->index << PAGE_CACHE_SHIFT) + offset_in_page;
	offset = ((((off_t)page_for_lower->index) << PAGE_CACHE_SHIFT)
		  + offset_in_page);
	virt = kmap(page_for_lower);
	rc = ecryptfs_write_lower(ecryptfs_inode, virt, offset, size);
	kunmap(page_for_lower);
@@ -117,7 +118,8 @@ int ecryptfs_write(struct file *ecryptfs_file, char *data, loff_t offset,
{
	struct page *ecryptfs_page;
	char *ecryptfs_page_virt;
	u64 ecryptfs_file_size = i_size_read(ecryptfs_file->f_dentry->d_inode);
	loff_t ecryptfs_file_size =
		i_size_read(ecryptfs_file->f_dentry->d_inode);
	loff_t data_offset = 0;
	loff_t pos;
	int rc = 0;
@@ -277,7 +279,7 @@ int ecryptfs_read_lower_page_segment(struct page *page_for_ecryptfs,
	loff_t offset;
	int rc;

	offset = ((page_index << PAGE_CACHE_SHIFT) + offset_in_page);
	offset = ((((loff_t)page_index) << PAGE_CACHE_SHIFT) + offset_in_page);
	virt = kmap(page_for_ecryptfs);
	rc = ecryptfs_read_lower(virt, offset, size, ecryptfs_inode);
	kunmap(page_for_ecryptfs);
@@ -306,7 +308,8 @@ int ecryptfs_read(char *data, loff_t offset, size_t size,
{
	struct page *ecryptfs_page;
	char *ecryptfs_page_virt;
	u64 ecryptfs_file_size = i_size_read(ecryptfs_file->f_dentry->d_inode);
	loff_t ecryptfs_file_size =
		i_size_read(ecryptfs_file->f_dentry->d_inode);
	loff_t data_offset = 0;
	loff_t pos;
	int rc = 0;