aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ecryptfs
diff options
context:
space:
mode:
Diffstat (limited to 'fs/ecryptfs')
-rw-r--r--fs/ecryptfs/crypto.c24
-rw-r--r--fs/ecryptfs/ecryptfs_kernel.h4
-rw-r--r--fs/ecryptfs/inode.c2
-rw-r--r--fs/ecryptfs/mmap.c5
4 files changed, 15 insertions, 20 deletions
diff --git a/fs/ecryptfs/crypto.c b/fs/ecryptfs/crypto.c
index c907f6f49351..391f558eb4d0 100644
--- a/fs/ecryptfs/crypto.c
+++ b/fs/ecryptfs/crypto.c
@@ -834,14 +834,13 @@ void ecryptfs_set_default_sizes(struct ecryptfs_crypt_stat *crypt_stat)
834 set_extent_mask_and_shift(crypt_stat); 834 set_extent_mask_and_shift(crypt_stat);
835 crypt_stat->iv_bytes = ECRYPTFS_DEFAULT_IV_BYTES; 835 crypt_stat->iv_bytes = ECRYPTFS_DEFAULT_IV_BYTES;
836 if (crypt_stat->flags & ECRYPTFS_METADATA_IN_XATTR) 836 if (crypt_stat->flags & ECRYPTFS_METADATA_IN_XATTR)
837 crypt_stat->num_header_bytes_at_front = 837 crypt_stat->metadata_size = ECRYPTFS_MINIMUM_HEADER_EXTENT_SIZE;
838 ECRYPTFS_MINIMUM_HEADER_EXTENT_SIZE;
839 else { 838 else {
840 if (PAGE_CACHE_SIZE <= ECRYPTFS_MINIMUM_HEADER_EXTENT_SIZE) 839 if (PAGE_CACHE_SIZE <= ECRYPTFS_MINIMUM_HEADER_EXTENT_SIZE)
841 crypt_stat->num_header_bytes_at_front = 840 crypt_stat->metadata_size =
842 ECRYPTFS_MINIMUM_HEADER_EXTENT_SIZE; 841 ECRYPTFS_MINIMUM_HEADER_EXTENT_SIZE;
843 else 842 else
844 crypt_stat->num_header_bytes_at_front = PAGE_CACHE_SIZE; 843 crypt_stat->metadata_size = PAGE_CACHE_SIZE;
845 } 844 }
846} 845}
847 846
@@ -1238,8 +1237,7 @@ ecryptfs_write_header_metadata(char *virt,
1238 1237
1239 header_extent_size = (u32)crypt_stat->extent_size; 1238 header_extent_size = (u32)crypt_stat->extent_size;
1240 num_header_extents_at_front = 1239 num_header_extents_at_front =
1241 (u16)(crypt_stat->num_header_bytes_at_front 1240 (u16)(crypt_stat->metadata_size / crypt_stat->extent_size);
1242 / crypt_stat->extent_size);
1243 put_unaligned_be32(header_extent_size, virt); 1241 put_unaligned_be32(header_extent_size, virt);
1244 virt += 4; 1242 virt += 4;
1245 put_unaligned_be16(num_header_extents_at_front, virt); 1243 put_unaligned_be16(num_header_extents_at_front, virt);
@@ -1382,7 +1380,7 @@ int ecryptfs_write_metadata(struct dentry *ecryptfs_dentry)
1382 rc = -EINVAL; 1380 rc = -EINVAL;
1383 goto out; 1381 goto out;
1384 } 1382 }
1385 virt_len = crypt_stat->num_header_bytes_at_front; 1383 virt_len = crypt_stat->metadata_size;
1386 order = get_order(virt_len); 1384 order = get_order(virt_len);
1387 /* Released in this function */ 1385 /* Released in this function */
1388 virt = (char *)ecryptfs_get_zeroed_pages(GFP_KERNEL, order); 1386 virt = (char *)ecryptfs_get_zeroed_pages(GFP_KERNEL, order);
@@ -1428,16 +1426,15 @@ static int parse_header_metadata(struct ecryptfs_crypt_stat *crypt_stat,
1428 header_extent_size = get_unaligned_be32(virt); 1426 header_extent_size = get_unaligned_be32(virt);
1429 virt += sizeof(__be32); 1427 virt += sizeof(__be32);
1430 num_header_extents_at_front = get_unaligned_be16(virt); 1428 num_header_extents_at_front = get_unaligned_be16(virt);
1431 crypt_stat->num_header_bytes_at_front = 1429 crypt_stat->metadata_size = (((size_t)num_header_extents_at_front
1432 (((size_t)num_header_extents_at_front 1430 * (size_t)header_extent_size));
1433 * (size_t)header_extent_size));
1434 (*bytes_read) = (sizeof(__be32) + sizeof(__be16)); 1431 (*bytes_read) = (sizeof(__be32) + sizeof(__be16));
1435 if ((validate_header_size == ECRYPTFS_VALIDATE_HEADER_SIZE) 1432 if ((validate_header_size == ECRYPTFS_VALIDATE_HEADER_SIZE)
1436 && (crypt_stat->num_header_bytes_at_front 1433 && (crypt_stat->metadata_size
1437 < ECRYPTFS_MINIMUM_HEADER_EXTENT_SIZE)) { 1434 < ECRYPTFS_MINIMUM_HEADER_EXTENT_SIZE)) {
1438 rc = -EINVAL; 1435 rc = -EINVAL;
1439 printk(KERN_WARNING "Invalid header size: [%zd]\n", 1436 printk(KERN_WARNING "Invalid header size: [%zd]\n",
1440 crypt_stat->num_header_bytes_at_front); 1437 crypt_stat->metadata_size);
1441 } 1438 }
1442 return rc; 1439 return rc;
1443} 1440}
@@ -1452,8 +1449,7 @@ static int parse_header_metadata(struct ecryptfs_crypt_stat *crypt_stat,
1452 */ 1449 */
1453static void set_default_header_data(struct ecryptfs_crypt_stat *crypt_stat) 1450static void set_default_header_data(struct ecryptfs_crypt_stat *crypt_stat)
1454{ 1451{
1455 crypt_stat->num_header_bytes_at_front = 1452 crypt_stat->metadata_size = ECRYPTFS_MINIMUM_HEADER_EXTENT_SIZE;
1456 ECRYPTFS_MINIMUM_HEADER_EXTENT_SIZE;
1457} 1453}
1458 1454
1459/** 1455/**
diff --git a/fs/ecryptfs/ecryptfs_kernel.h b/fs/ecryptfs/ecryptfs_kernel.h
index 8456f70606ad..d031efd7666b 100644
--- a/fs/ecryptfs/ecryptfs_kernel.h
+++ b/fs/ecryptfs/ecryptfs_kernel.h
@@ -273,7 +273,7 @@ struct ecryptfs_crypt_stat {
273 u32 flags; 273 u32 flags;
274 unsigned int file_version; 274 unsigned int file_version;
275 size_t iv_bytes; 275 size_t iv_bytes;
276 size_t num_header_bytes_at_front; 276 size_t metadata_size;
277 size_t extent_size; /* Data extent size; default is 4096 */ 277 size_t extent_size; /* Data extent size; default is 4096 */
278 size_t key_size; 278 size_t key_size;
279 size_t extent_shift; 279 size_t extent_shift;
@@ -469,7 +469,7 @@ ecryptfs_lower_header_size(struct ecryptfs_crypt_stat *crypt_stat)
469{ 469{
470 if (crypt_stat->flags & ECRYPTFS_METADATA_IN_XATTR) 470 if (crypt_stat->flags & ECRYPTFS_METADATA_IN_XATTR)
471 return 0; 471 return 0;
472 return crypt_stat->num_header_bytes_at_front; 472 return crypt_stat->metadata_size;
473} 473}
474 474
475static inline struct ecryptfs_file_info * 475static inline struct ecryptfs_file_info *
diff --git a/fs/ecryptfs/inode.c b/fs/ecryptfs/inode.c
index 1a739531b0dd..a50efb18701c 100644
--- a/fs/ecryptfs/inode.c
+++ b/fs/ecryptfs/inode.c
@@ -335,7 +335,7 @@ int ecryptfs_lookup_and_interpose_lower(struct dentry *ecryptfs_dentry,
335 ecryptfs_dentry->d_sb)->mount_crypt_stat; 335 ecryptfs_dentry->d_sb)->mount_crypt_stat;
336 if (mount_crypt_stat->flags & ECRYPTFS_ENCRYPTED_VIEW_ENABLED) { 336 if (mount_crypt_stat->flags & ECRYPTFS_ENCRYPTED_VIEW_ENABLED) {
337 if (crypt_stat->flags & ECRYPTFS_METADATA_IN_XATTR) 337 if (crypt_stat->flags & ECRYPTFS_METADATA_IN_XATTR)
338 file_size = (crypt_stat->num_header_bytes_at_front 338 file_size = (crypt_stat->metadata_size
339 + i_size_read(lower_dentry->d_inode)); 339 + i_size_read(lower_dentry->d_inode));
340 else 340 else
341 file_size = i_size_read(lower_dentry->d_inode); 341 file_size = i_size_read(lower_dentry->d_inode);
diff --git a/fs/ecryptfs/mmap.c b/fs/ecryptfs/mmap.c
index 5a30e01547f1..270f42ae7c0d 100644
--- a/fs/ecryptfs/mmap.c
+++ b/fs/ecryptfs/mmap.c
@@ -122,8 +122,7 @@ ecryptfs_copy_up_encrypted_with_header(struct page *page,
122 * num_extents_per_page) 122 * num_extents_per_page)
123 + extent_num_in_page); 123 + extent_num_in_page);
124 size_t num_header_extents_at_front = 124 size_t num_header_extents_at_front =
125 (crypt_stat->num_header_bytes_at_front 125 (crypt_stat->metadata_size / crypt_stat->extent_size);
126 / crypt_stat->extent_size);
127 126
128 if (view_extent_num < num_header_extents_at_front) { 127 if (view_extent_num < num_header_extents_at_front) {
129 /* This is a header extent */ 128 /* This is a header extent */
@@ -152,7 +151,7 @@ ecryptfs_copy_up_encrypted_with_header(struct page *page,
152 /* This is an encrypted data extent */ 151 /* This is an encrypted data extent */
153 loff_t lower_offset = 152 loff_t lower_offset =
154 ((view_extent_num * crypt_stat->extent_size) 153 ((view_extent_num * crypt_stat->extent_size)
155 - crypt_stat->num_header_bytes_at_front); 154 - crypt_stat->metadata_size);
156 155
157 rc = ecryptfs_read_lower_page_segment( 156 rc = ecryptfs_read_lower_page_segment(
158 page, (lower_offset >> PAGE_CACHE_SHIFT), 157 page, (lower_offset >> PAGE_CACHE_SHIFT),