summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fs/ecryptfs/crypto.c50
1 files changed, 14 insertions, 36 deletions
diff --git a/fs/ecryptfs/crypto.c b/fs/ecryptfs/crypto.c
index 9845d2fd2506..9947388ccd8d 100644
--- a/fs/ecryptfs/crypto.c
+++ b/fs/ecryptfs/crypto.c
@@ -40,10 +40,6 @@
#define DECRYPT 0
#define ENCRYPT 1
-static int crypt_page_offset(struct ecryptfs_crypt_stat *crypt_stat,
- struct page *dst_page, struct page *src_page,
- int offset, int size, unsigned char *iv, int op);
-
/**
* ecryptfs_to_hex
* @dst: Buffer to take hex character representation of contents of
@@ -436,10 +432,11 @@ static int crypt_extent(struct page *dst_page,
pgoff_t page_index = op == ENCRYPT ? src_page->index : dst_page->index;
loff_t extent_base;
char extent_iv[ECRYPTFS_MAX_IV_BYTES];
+ struct scatterlist src_sg, dst_sg;
+ size_t extent_size = crypt_stat->extent_size;
int rc;
- extent_base = (((loff_t)page_index)
- * (PAGE_CACHE_SIZE / crypt_stat->extent_size));
+ extent_base = (((loff_t)page_index) * (PAGE_CACHE_SIZE / extent_size));
rc = ecryptfs_derive_iv(extent_iv, crypt_stat,
(extent_base + extent_offset));
if (rc) {
@@ -448,9 +445,17 @@ static int crypt_extent(struct page *dst_page,
(unsigned long long)(extent_base + extent_offset), rc);
goto out;
}
- rc = crypt_page_offset(crypt_stat, dst_page, src_page,
- (extent_offset * crypt_stat->extent_size),
- crypt_stat->extent_size, extent_iv, op);
+
+ sg_init_table(&src_sg, 1);
+ sg_init_table(&dst_sg, 1);
+
+ sg_set_page(&src_sg, src_page, extent_size,
+ extent_offset * extent_size);
+ sg_set_page(&dst_sg, dst_page, extent_size,
+ extent_offset * extent_size);
+
+ rc = crypt_scatterlist(crypt_stat, &dst_sg, &src_sg, extent_size,
+ extent_iv, op);
if (rc < 0) {
printk(KERN_ERR "%s: Error attempting to crypt page with "
"page_index = [%ld], extent_offset = [%ld]; "
@@ -588,33 +593,6 @@ out:
return rc;
}
-/**
- * crypt_page_offset
- * @crypt_stat: The cryptographic context
- * @dst_page: The page to write the result into
- * @src_page: The page to read from
- * @offset: The byte offset into the dst_page and src_page
- * @size: The number of bytes of data
- * @iv: The initialization vector to use for the crypto operation
- * @op: ENCRYPT or DECRYPT to indicate the desired operation
- *
- * Returns the number of bytes encrypted or decrypted
- */
-static int crypt_page_offset(struct ecryptfs_crypt_stat *crypt_stat,
- struct page *dst_page, struct page *src_page,
- int offset, int size, unsigned char *iv, int op)
-{
- struct scatterlist src_sg, dst_sg;
-
- sg_init_table(&src_sg, 1);
- sg_init_table(&dst_sg, 1);
-
- sg_set_page(&src_sg, src_page, size, offset);
- sg_set_page(&dst_sg, dst_page, size, offset);
-
- return crypt_scatterlist(crypt_stat, &dst_sg, &src_sg, size, iv, op);
-}
-
#define ECRYPTFS_MAX_SCATTERLIST_LEN 4
/**