aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ecryptfs/crypto.c
diff options
context:
space:
mode:
authorMichael Halcrow <mhalcrow@us.ibm.com>2007-10-16 04:28:12 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-10-16 12:43:12 -0400
commitd6a13c17164fccab8aa96ca435ddacbf428335ca (patch)
tree8995bb0b5c22a97c8f6c86eff797ff2de0421ee2 /fs/ecryptfs/crypto.c
parentbf12be1cc851cface331b0e74713a6bb1cb046b0 (diff)
eCryptfs: fix data types
Update data types and add casts in order to avoid potential overflow issues. Signed-off-by: Michael Halcrow <mhalcrow@us.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'fs/ecryptfs/crypto.c')
-rw-r--r--fs/ecryptfs/crypto.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/fs/ecryptfs/crypto.c b/fs/ecryptfs/crypto.c
index 26070d69e59a..9408ea484164 100644
--- a/fs/ecryptfs/crypto.c
+++ b/fs/ecryptfs/crypto.c
@@ -149,7 +149,7 @@ out:
149 * ecryptfs_derive_iv 149 * ecryptfs_derive_iv
150 * @iv: destination for the derived iv vale 150 * @iv: destination for the derived iv vale
151 * @crypt_stat: Pointer to crypt_stat struct for the current inode 151 * @crypt_stat: Pointer to crypt_stat struct for the current inode
152 * @offset: Offset of the page whose's iv we are to derive 152 * @offset: Offset of the extent whose IV we are to derive
153 * 153 *
154 * Generate the initialization vector from the given root IV and page 154 * Generate the initialization vector from the given root IV and page
155 * offset. 155 * offset.
@@ -157,7 +157,7 @@ out:
157 * Returns zero on success; non-zero on error. 157 * Returns zero on success; non-zero on error.
158 */ 158 */
159static int ecryptfs_derive_iv(char *iv, struct ecryptfs_crypt_stat *crypt_stat, 159static int ecryptfs_derive_iv(char *iv, struct ecryptfs_crypt_stat *crypt_stat,
160 pgoff_t offset) 160 loff_t offset)
161{ 161{
162 int rc = 0; 162 int rc = 0;
163 char dst[MD5_DIGEST_SIZE]; 163 char dst[MD5_DIGEST_SIZE];
@@ -173,7 +173,7 @@ static int ecryptfs_derive_iv(char *iv, struct ecryptfs_crypt_stat *crypt_stat,
173 * hashing business. -Halcrow */ 173 * hashing business. -Halcrow */
174 memcpy(src, crypt_stat->root_iv, crypt_stat->iv_bytes); 174 memcpy(src, crypt_stat->root_iv, crypt_stat->iv_bytes);
175 memset((src + crypt_stat->iv_bytes), 0, 16); 175 memset((src + crypt_stat->iv_bytes), 0, 16);
176 snprintf((src + crypt_stat->iv_bytes), 16, "%ld", offset); 176 snprintf((src + crypt_stat->iv_bytes), 16, "%lld", offset);
177 if (unlikely(ecryptfs_verbosity > 0)) { 177 if (unlikely(ecryptfs_verbosity > 0)) {
178 ecryptfs_printk(KERN_DEBUG, "source:\n"); 178 ecryptfs_printk(KERN_DEBUG, "source:\n");
179 ecryptfs_dump_hex(src, (crypt_stat->iv_bytes + 16)); 179 ecryptfs_dump_hex(src, (crypt_stat->iv_bytes + 16));
@@ -497,11 +497,11 @@ static int ecryptfs_encrypt_extent(struct page *enc_extent_page,
497 struct page *page, 497 struct page *page,
498 unsigned long extent_offset) 498 unsigned long extent_offset)
499{ 499{
500 unsigned long extent_base; 500 loff_t extent_base;
501 char extent_iv[ECRYPTFS_MAX_IV_BYTES]; 501 char extent_iv[ECRYPTFS_MAX_IV_BYTES];
502 int rc; 502 int rc;
503 503
504 extent_base = (page->index 504 extent_base = (((loff_t)page->index)
505 * (PAGE_CACHE_SIZE / crypt_stat->extent_size)); 505 * (PAGE_CACHE_SIZE / crypt_stat->extent_size));
506 rc = ecryptfs_derive_iv(extent_iv, crypt_stat, 506 rc = ecryptfs_derive_iv(extent_iv, crypt_stat,
507 (extent_base + extent_offset)); 507 (extent_base + extent_offset));
@@ -605,8 +605,9 @@ int ecryptfs_encrypt_page(struct page *page)
605 goto out; 605 goto out;
606 } 606 }
607 ecryptfs_lower_offset_for_extent( 607 ecryptfs_lower_offset_for_extent(
608 &offset, ((page->index * (PAGE_CACHE_SIZE 608 &offset, ((((loff_t)page->index)
609 / crypt_stat->extent_size)) 609 * (PAGE_CACHE_SIZE
610 / crypt_stat->extent_size))
610 + extent_offset), crypt_stat); 611 + extent_offset), crypt_stat);
611 rc = ecryptfs_write_lower(ecryptfs_inode, enc_extent_virt, 612 rc = ecryptfs_write_lower(ecryptfs_inode, enc_extent_virt,
612 offset, crypt_stat->extent_size); 613 offset, crypt_stat->extent_size);
@@ -628,11 +629,11 @@ static int ecryptfs_decrypt_extent(struct page *page,
628 struct page *enc_extent_page, 629 struct page *enc_extent_page,
629 unsigned long extent_offset) 630 unsigned long extent_offset)
630{ 631{
631 unsigned long extent_base; 632 loff_t extent_base;
632 char extent_iv[ECRYPTFS_MAX_IV_BYTES]; 633 char extent_iv[ECRYPTFS_MAX_IV_BYTES];
633 int rc; 634 int rc;
634 635
635 extent_base = (page->index 636 extent_base = (((loff_t)page->index)
636 * (PAGE_CACHE_SIZE / crypt_stat->extent_size)); 637 * (PAGE_CACHE_SIZE / crypt_stat->extent_size));
637 rc = ecryptfs_derive_iv(extent_iv, crypt_stat, 638 rc = ecryptfs_derive_iv(extent_iv, crypt_stat,
638 (extent_base + extent_offset)); 639 (extent_base + extent_offset));
@@ -1471,7 +1472,7 @@ ecryptfs_write_metadata_to_contents(struct ecryptfs_crypt_stat *crypt_stat,
1471 while (current_header_page < header_pages) { 1472 while (current_header_page < header_pages) {
1472 loff_t offset; 1473 loff_t offset;
1473 1474
1474 offset = (current_header_page << PAGE_CACHE_SHIFT); 1475 offset = (((loff_t)current_header_page) << PAGE_CACHE_SHIFT);
1475 if ((rc = ecryptfs_write_lower(ecryptfs_dentry->d_inode, 1476 if ((rc = ecryptfs_write_lower(ecryptfs_dentry->d_inode,
1476 page_virt, offset, 1477 page_virt, offset,
1477 PAGE_CACHE_SIZE))) { 1478 PAGE_CACHE_SIZE))) {