eCryptfs: Use entire helper page during page crypto operations

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>
This commit is contained in:
Tyler Hicks 2013-04-16 23:21:24 -07:00
Родитель fc8b14d338
Коммит 12003e5b18
1 изменённых файлов: 16 добавлений и 13 удалений

Просмотреть файл

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