|
@@ -475,8 +475,8 @@ int ecryptfs_encrypt_page(struct page *page)
|
|
|
{
|
|
|
struct inode *ecryptfs_inode;
|
|
|
struct ecryptfs_crypt_stat *crypt_stat;
|
|
|
- char *enc_extent_virt = NULL;
|
|
|
- struct page *enc_extent_page;
|
|
|
+ char *enc_extent_virt;
|
|
|
+ struct page *enc_extent_page = NULL;
|
|
|
loff_t extent_offset;
|
|
|
int rc = 0;
|
|
|
|
|
@@ -492,14 +492,14 @@ int ecryptfs_encrypt_page(struct page *page)
|
|
|
page->index);
|
|
|
goto out;
|
|
|
}
|
|
|
- enc_extent_virt = kmalloc(PAGE_CACHE_SIZE, GFP_USER);
|
|
|
- if (!enc_extent_virt) {
|
|
|
+ enc_extent_page = alloc_page(GFP_USER);
|
|
|
+ if (!enc_extent_page) {
|
|
|
rc = -ENOMEM;
|
|
|
ecryptfs_printk(KERN_ERR, "Error allocating memory for "
|
|
|
"encrypted extent\n");
|
|
|
goto out;
|
|
|
}
|
|
|
- enc_extent_page = virt_to_page(enc_extent_virt);
|
|
|
+ enc_extent_virt = kmap(enc_extent_page);
|
|
|
for (extent_offset = 0;
|
|
|
extent_offset < (PAGE_CACHE_SIZE / crypt_stat->extent_size);
|
|
|
extent_offset++) {
|
|
@@ -527,7 +527,10 @@ int ecryptfs_encrypt_page(struct page *page)
|
|
|
}
|
|
|
}
|
|
|
out:
|
|
|
- kfree(enc_extent_virt);
|
|
|
+ if (enc_extent_page) {
|
|
|
+ kunmap(enc_extent_page);
|
|
|
+ __free_page(enc_extent_page);
|
|
|
+ }
|
|
|
return rc;
|
|
|
}
|
|
|
|
|
@@ -609,8 +612,8 @@ int ecryptfs_decrypt_page(struct page *page)
|
|
|
{
|
|
|
struct inode *ecryptfs_inode;
|
|
|
struct ecryptfs_crypt_stat *crypt_stat;
|
|
|
- char *enc_extent_virt = NULL;
|
|
|
- struct page *enc_extent_page;
|
|
|
+ char *enc_extent_virt;
|
|
|
+ struct page *enc_extent_page = NULL;
|
|
|
unsigned long extent_offset;
|
|
|
int rc = 0;
|
|
|
|
|
@@ -627,14 +630,14 @@ int ecryptfs_decrypt_page(struct page *page)
|
|
|
page->index);
|
|
|
goto out;
|
|
|
}
|
|
|
- enc_extent_virt = kmalloc(PAGE_CACHE_SIZE, GFP_USER);
|
|
|
- if (!enc_extent_virt) {
|
|
|
+ enc_extent_page = alloc_page(GFP_USER);
|
|
|
+ if (!enc_extent_page) {
|
|
|
rc = -ENOMEM;
|
|
|
ecryptfs_printk(KERN_ERR, "Error allocating memory for "
|
|
|
"encrypted extent\n");
|
|
|
goto out;
|
|
|
}
|
|
|
- enc_extent_page = virt_to_page(enc_extent_virt);
|
|
|
+ enc_extent_virt = kmap(enc_extent_page);
|
|
|
for (extent_offset = 0;
|
|
|
extent_offset < (PAGE_CACHE_SIZE / crypt_stat->extent_size);
|
|
|
extent_offset++) {
|
|
@@ -662,7 +665,10 @@ int ecryptfs_decrypt_page(struct page *page)
|
|
|
}
|
|
|
}
|
|
|
out:
|
|
|
- kfree(enc_extent_virt);
|
|
|
+ if (enc_extent_page) {
|
|
|
+ kunmap(enc_extent_page);
|
|
|
+ __free_page(enc_extent_page);
|
|
|
+ }
|
|
|
return rc;
|
|
|
}
|
|
|
|