aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/ecryptfs/crypto.c21
-rw-r--r--fs/ecryptfs/mmap.c5
-rw-r--r--fs/ecryptfs/read_write.c11
3 files changed, 21 insertions, 16 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))) {
diff --git a/fs/ecryptfs/mmap.c b/fs/ecryptfs/mmap.c
index 9bc707df3b60..6ae0afb238d1 100644
--- a/fs/ecryptfs/mmap.c
+++ b/fs/ecryptfs/mmap.c
@@ -286,7 +286,8 @@ ecryptfs_copy_up_encrypted_with_header(struct page *page,
286 int rc = 0; 286 int rc = 0;
287 287
288 while (extent_num_in_page < num_extents_per_page) { 288 while (extent_num_in_page < num_extents_per_page) {
289 loff_t view_extent_num = ((page->index * num_extents_per_page) 289 loff_t view_extent_num = ((((loff_t)page->index)
290 * num_extents_per_page)
290 + extent_num_in_page); 291 + extent_num_in_page);
291 292
292 if (view_extent_num < crypt_stat->num_header_extents_at_front) { 293 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,
706 "index [0x%.16x])\n", page->index); 707 "index [0x%.16x])\n", page->index);
707 goto out; 708 goto out;
708 } 709 }
709 pos = (page->index << PAGE_CACHE_SHIFT) + to; 710 pos = (((loff_t)page->index) << PAGE_CACHE_SHIFT) + to;
710 if (pos > i_size_read(ecryptfs_inode)) { 711 if (pos > i_size_read(ecryptfs_inode)) {
711 i_size_write(ecryptfs_inode, pos); 712 i_size_write(ecryptfs_inode, pos);
712 ecryptfs_printk(KERN_DEBUG, "Expanded file size to " 713 ecryptfs_printk(KERN_DEBUG, "Expanded file size to "
diff --git a/fs/ecryptfs/read_write.c b/fs/ecryptfs/read_write.c
index ccd2599e0a4f..272eaeb9a738 100644
--- a/fs/ecryptfs/read_write.c
+++ b/fs/ecryptfs/read_write.c
@@ -87,7 +87,8 @@ int ecryptfs_write_lower_page_segment(struct inode *ecryptfs_inode,
87 loff_t offset; 87 loff_t offset;
88 int rc; 88 int rc;
89 89
90 offset = (page_for_lower->index << PAGE_CACHE_SHIFT) + offset_in_page; 90 offset = ((((off_t)page_for_lower->index) << PAGE_CACHE_SHIFT)
91 + offset_in_page);
91 virt = kmap(page_for_lower); 92 virt = kmap(page_for_lower);
92 rc = ecryptfs_write_lower(ecryptfs_inode, virt, offset, size); 93 rc = ecryptfs_write_lower(ecryptfs_inode, virt, offset, size);
93 kunmap(page_for_lower); 94 kunmap(page_for_lower);
@@ -117,7 +118,8 @@ int ecryptfs_write(struct file *ecryptfs_file, char *data, loff_t offset,
117{ 118{
118 struct page *ecryptfs_page; 119 struct page *ecryptfs_page;
119 char *ecryptfs_page_virt; 120 char *ecryptfs_page_virt;
120 u64 ecryptfs_file_size = i_size_read(ecryptfs_file->f_dentry->d_inode); 121 loff_t ecryptfs_file_size =
122 i_size_read(ecryptfs_file->f_dentry->d_inode);
121 loff_t data_offset = 0; 123 loff_t data_offset = 0;
122 loff_t pos; 124 loff_t pos;
123 int rc = 0; 125 int rc = 0;
@@ -277,7 +279,7 @@ int ecryptfs_read_lower_page_segment(struct page *page_for_ecryptfs,
277 loff_t offset; 279 loff_t offset;
278 int rc; 280 int rc;
279 281
280 offset = ((page_index << PAGE_CACHE_SHIFT) + offset_in_page); 282 offset = ((((loff_t)page_index) << PAGE_CACHE_SHIFT) + offset_in_page);
281 virt = kmap(page_for_ecryptfs); 283 virt = kmap(page_for_ecryptfs);
282 rc = ecryptfs_read_lower(virt, offset, size, ecryptfs_inode); 284 rc = ecryptfs_read_lower(virt, offset, size, ecryptfs_inode);
283 kunmap(page_for_ecryptfs); 285 kunmap(page_for_ecryptfs);
@@ -306,7 +308,8 @@ int ecryptfs_read(char *data, loff_t offset, size_t size,
306{ 308{
307 struct page *ecryptfs_page; 309 struct page *ecryptfs_page;
308 char *ecryptfs_page_virt; 310 char *ecryptfs_page_virt;
309 u64 ecryptfs_file_size = i_size_read(ecryptfs_file->f_dentry->d_inode); 311 loff_t ecryptfs_file_size =
312 i_size_read(ecryptfs_file->f_dentry->d_inode);
310 loff_t data_offset = 0; 313 loff_t data_offset = 0;
311 loff_t pos; 314 loff_t pos;
312 int rc = 0; 315 int rc = 0;