eCryptfs: Merge ecryptfs_encrypt_extent() and ecryptfs_decrypt_extent()
They are identical except if the src_page or dst_page index is used, so they can be merged safely if page_index is conditionally assigned. Signed-off-by: Tyler Hicks <tyhicks@canonical.com>
This commit is contained in:
parent
a8ca90e207
commit
d78de61896
@ -416,28 +416,29 @@ static loff_t lower_offset_for_page(struct ecryptfs_crypt_stat *crypt_stat,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ecryptfs_encrypt_extent
|
* crypt_extent
|
||||||
* @enc_extent_page: Allocated page into which to encrypt the data in
|
* @dst_page: The page to write the result into
|
||||||
* @page
|
|
||||||
* @crypt_stat: crypt_stat containing cryptographic context for the
|
* @crypt_stat: crypt_stat containing cryptographic context for the
|
||||||
* encryption operation
|
* encryption operation
|
||||||
* @page: Page containing plaintext data extent to encrypt
|
* @src_page: The page to read from
|
||||||
* @extent_offset: Page extent offset for use in generating IV
|
* @extent_offset: Page extent offset for use in generating IV
|
||||||
|
* @op: ENCRYPT or DECRYPT to indicate the desired operation
|
||||||
*
|
*
|
||||||
* Encrypts one extent of data.
|
* Encrypts or decrypts one extent of data.
|
||||||
*
|
*
|
||||||
* Return zero on success; non-zero otherwise
|
* Return zero on success; non-zero otherwise
|
||||||
*/
|
*/
|
||||||
static int ecryptfs_encrypt_extent(struct page *enc_extent_page,
|
static int crypt_extent(struct page *dst_page,
|
||||||
struct ecryptfs_crypt_stat *crypt_stat,
|
struct ecryptfs_crypt_stat *crypt_stat,
|
||||||
struct page *page,
|
struct page *src_page,
|
||||||
unsigned long extent_offset)
|
unsigned long extent_offset, int op)
|
||||||
{
|
{
|
||||||
|
pgoff_t page_index = op == ENCRYPT ? src_page->index : dst_page->index;
|
||||||
loff_t extent_base;
|
loff_t extent_base;
|
||||||
char extent_iv[ECRYPTFS_MAX_IV_BYTES];
|
char extent_iv[ECRYPTFS_MAX_IV_BYTES];
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
extent_base = (((loff_t)page->index)
|
extent_base = (((loff_t)page_index)
|
||||||
* (PAGE_CACHE_SIZE / crypt_stat->extent_size));
|
* (PAGE_CACHE_SIZE / crypt_stat->extent_size));
|
||||||
rc = ecryptfs_derive_iv(extent_iv, crypt_stat,
|
rc = ecryptfs_derive_iv(extent_iv, crypt_stat,
|
||||||
(extent_base + extent_offset));
|
(extent_base + extent_offset));
|
||||||
@ -447,14 +448,13 @@ 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 = crypt_page_offset(crypt_stat, enc_extent_page, page,
|
rc = crypt_page_offset(crypt_stat, dst_page, src_page,
|
||||||
(extent_offset * crypt_stat->extent_size),
|
(extent_offset * crypt_stat->extent_size),
|
||||||
crypt_stat->extent_size, extent_iv, ENCRYPT);
|
crypt_stat->extent_size, extent_iv, op);
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
printk(KERN_ERR "%s: Error attempting to encrypt page with "
|
printk(KERN_ERR "%s: Error attempting to crypt page with "
|
||||||
"page->index = [%ld], extent_offset = [%ld]; "
|
"page_index = [%ld], extent_offset = [%ld]; "
|
||||||
"rc = [%d]\n", __func__, page->index, extent_offset,
|
"rc = [%d]\n", __func__, page_index, extent_offset, rc);
|
||||||
rc);
|
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
rc = 0;
|
rc = 0;
|
||||||
@ -503,8 +503,8 @@ int ecryptfs_encrypt_page(struct page *page)
|
|||||||
for (extent_offset = 0;
|
for (extent_offset = 0;
|
||||||
extent_offset < (PAGE_CACHE_SIZE / crypt_stat->extent_size);
|
extent_offset < (PAGE_CACHE_SIZE / crypt_stat->extent_size);
|
||||||
extent_offset++) {
|
extent_offset++) {
|
||||||
rc = ecryptfs_encrypt_extent(enc_extent_page, crypt_stat, page,
|
rc = crypt_extent(enc_extent_page, crypt_stat, page,
|
||||||
extent_offset);
|
extent_offset, ENCRYPT);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
printk(KERN_ERR "%s: Error encrypting extent; "
|
printk(KERN_ERR "%s: Error encrypting extent; "
|
||||||
"rc = [%d]\n", __func__, rc);
|
"rc = [%d]\n", __func__, rc);
|
||||||
@ -531,40 +531,6 @@ out:
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ecryptfs_decrypt_extent(struct page *page,
|
|
||||||
struct ecryptfs_crypt_stat *crypt_stat,
|
|
||||||
struct page *enc_extent_page,
|
|
||||||
unsigned long extent_offset)
|
|
||||||
{
|
|
||||||
loff_t extent_base;
|
|
||||||
char extent_iv[ECRYPTFS_MAX_IV_BYTES];
|
|
||||||
int rc;
|
|
||||||
|
|
||||||
extent_base = (((loff_t)page->index)
|
|
||||||
* (PAGE_CACHE_SIZE / crypt_stat->extent_size));
|
|
||||||
rc = ecryptfs_derive_iv(extent_iv, crypt_stat,
|
|
||||||
(extent_base + extent_offset));
|
|
||||||
if (rc) {
|
|
||||||
ecryptfs_printk(KERN_ERR, "Error attempting to derive IV for "
|
|
||||||
"extent [0x%.16llx]; rc = [%d]\n",
|
|
||||||
(unsigned long long)(extent_base + extent_offset), rc);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
rc = crypt_page_offset(crypt_stat, page, enc_extent_page,
|
|
||||||
(extent_offset * crypt_stat->extent_size),
|
|
||||||
crypt_stat->extent_size, extent_iv, DECRYPT);
|
|
||||||
if (rc < 0) {
|
|
||||||
printk(KERN_ERR "%s: Error attempting to decrypt to page with "
|
|
||||||
"page->index = [%ld], extent_offset = [%ld]; "
|
|
||||||
"rc = [%d]\n", __func__, page->index, extent_offset,
|
|
||||||
rc);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
rc = 0;
|
|
||||||
out:
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ecryptfs_decrypt_page
|
* ecryptfs_decrypt_page
|
||||||
* @page: Page mapped from the eCryptfs inode for the file; data read
|
* @page: Page mapped from the eCryptfs inode for the file; data read
|
||||||
@ -610,8 +576,8 @@ int ecryptfs_decrypt_page(struct page *page)
|
|||||||
for (extent_offset = 0;
|
for (extent_offset = 0;
|
||||||
extent_offset < (PAGE_CACHE_SIZE / crypt_stat->extent_size);
|
extent_offset < (PAGE_CACHE_SIZE / crypt_stat->extent_size);
|
||||||
extent_offset++) {
|
extent_offset++) {
|
||||||
rc = ecryptfs_decrypt_extent(page, crypt_stat, page,
|
rc = crypt_extent(page, crypt_stat, page,
|
||||||
extent_offset);
|
extent_offset, DECRYPT);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
printk(KERN_ERR "%s: Error encrypting extent; "
|
printk(KERN_ERR "%s: Error encrypting extent; "
|
||||||
"rc = [%d]\n", __func__, rc);
|
"rc = [%d]\n", __func__, rc);
|
||||||
|
Loading…
Reference in New Issue
Block a user