eCryptfs: Use entire helper page during page crypto operations
authorTyler Hicks <tyhicks@canonical.com>
Wed, 17 Apr 2013 06:21:24 +0000 (23:21 -0700)
committerTyler Hicks <tyhicks@canonical.com>
Sat, 8 Jun 2013 00:28:21 +0000 (17:28 -0700)
When encrypting eCryptfs pages and decrypting pages from the lower
filesystem, utilize the entire helper page rather than only the first
4096 bytes.

This only affects architectures where PAGE_CACHE_SIZE is larger than
4096 bytes.

Signed-off-by: Tyler Hicks <tyhicks@canonical.com>
fs/ecryptfs/crypto.c

index f71ec125290db7da87355f444f7308826ee1c034..e8976c004669eeac6a212996b0d651f35deb6e45 100644 (file)
@@ -450,10 +450,11 @@ static int ecryptfs_encrypt_extent(struct page *enc_extent_page,
                        (unsigned long long)(extent_base + extent_offset), rc);
                goto out;
        }
-       rc = ecryptfs_encrypt_page_offset(crypt_stat, enc_extent_page, 0,
-                                         page, (extent_offset
-                                                * crypt_stat->extent_size),
-                                         crypt_stat->extent_size, extent_iv);
+       rc = ecryptfs_encrypt_page_offset(crypt_stat, enc_extent_page,
+                                       extent_offset * crypt_stat->extent_size,
+                                       page,
+                                       extent_offset * crypt_stat->extent_size,
+                                       crypt_stat->extent_size, extent_iv);
        if (rc < 0) {
                printk(KERN_ERR "%s: Error attempting to encrypt page with "
                       "page->index = [%ld], extent_offset = [%ld]; "
@@ -520,8 +521,9 @@ int ecryptfs_encrypt_page(struct page *page)
                                   * (PAGE_CACHE_SIZE
                                      / crypt_stat->extent_size))
                                  + extent_offset), crypt_stat);
-               rc = ecryptfs_write_lower(ecryptfs_inode, enc_extent_virt,
-                                         offset, crypt_stat->extent_size);
+               rc = ecryptfs_write_lower(ecryptfs_inode, (enc_extent_virt +
+                               extent_offset * crypt_stat->extent_size),
+                               offset, crypt_stat->extent_size);
                if (rc < 0) {
                        ecryptfs_printk(KERN_ERR, "Error attempting "
                                        "to write lower page; rc = [%d]"
@@ -558,10 +560,10 @@ static int ecryptfs_decrypt_extent(struct page *page,
                goto out;
        }
        rc = ecryptfs_decrypt_page_offset(crypt_stat, page,
-                                         (extent_offset
-                                          * crypt_stat->extent_size),
-                                         enc_extent_page, 0,
-                                         crypt_stat->extent_size, extent_iv);
+                                       extent_offset * crypt_stat->extent_size,
+                                       enc_extent_page,
+                                       extent_offset * crypt_stat->extent_size,
+                                       crypt_stat->extent_size, extent_iv);
        if (rc < 0) {
                printk(KERN_ERR "%s: Error attempting to decrypt to page with "
                       "page->index = [%ld], extent_offset = [%ld]; "
@@ -620,9 +622,10 @@ int ecryptfs_decrypt_page(struct page *page)
                        &offset, ((page->index * (PAGE_CACHE_SIZE
                                                  / crypt_stat->extent_size))
                                  + extent_offset), crypt_stat);
-               rc = ecryptfs_read_lower(enc_extent_virt, offset,
-                                        crypt_stat->extent_size,
-                                        ecryptfs_inode);
+               rc = ecryptfs_read_lower((enc_extent_virt +
+                               extent_offset * crypt_stat->extent_size),
+                               offset, crypt_stat->extent_size,
+                               ecryptfs_inode);
                if (rc < 0) {
                        ecryptfs_printk(KERN_ERR, "Error attempting "
                                        "to read lower page; rc = [%d]"