diff options
Diffstat (limited to 'fs/ecryptfs/crypto.c')
| -rw-r--r-- | fs/ecryptfs/crypto.c | 37 | 
1 files changed, 18 insertions, 19 deletions
diff --git a/fs/ecryptfs/crypto.c b/fs/ecryptfs/crypto.c index efb2b940039..1cc087635a5 100644 --- a/fs/ecryptfs/crypto.c +++ b/fs/ecryptfs/crypto.c @@ -382,8 +382,8 @@ out:  static void ecryptfs_lower_offset_for_extent(loff_t *offset, loff_t extent_num,  					     struct ecryptfs_crypt_stat *crypt_stat)  { -	(*offset) = (crypt_stat->num_header_bytes_at_front -		     + (crypt_stat->extent_size * extent_num)); +	(*offset) = ecryptfs_lower_header_size(crypt_stat) +		    + (crypt_stat->extent_size * extent_num);  }  /** @@ -835,13 +835,13 @@ void ecryptfs_set_default_sizes(struct ecryptfs_crypt_stat *crypt_stat)  	set_extent_mask_and_shift(crypt_stat);  	crypt_stat->iv_bytes = ECRYPTFS_DEFAULT_IV_BYTES;  	if (crypt_stat->flags & ECRYPTFS_METADATA_IN_XATTR) -		crypt_stat->num_header_bytes_at_front = 0; +		crypt_stat->metadata_size = ECRYPTFS_MINIMUM_HEADER_EXTENT_SIZE;  	else {  		if (PAGE_CACHE_SIZE <= ECRYPTFS_MINIMUM_HEADER_EXTENT_SIZE) -			crypt_stat->num_header_bytes_at_front = +			crypt_stat->metadata_size =  				ECRYPTFS_MINIMUM_HEADER_EXTENT_SIZE;  		else -			crypt_stat->num_header_bytes_at_front =	PAGE_CACHE_SIZE; +			crypt_stat->metadata_size = PAGE_CACHE_SIZE;  	}  } @@ -1108,9 +1108,9 @@ static void write_ecryptfs_marker(char *page_virt, size_t *written)  	(*written) = MAGIC_ECRYPTFS_MARKER_SIZE_BYTES;  } -static void -write_ecryptfs_flags(char *page_virt, struct ecryptfs_crypt_stat *crypt_stat, -		     size_t *written) +void ecryptfs_write_crypt_stat_flags(char *page_virt, +				     struct ecryptfs_crypt_stat *crypt_stat, +				     size_t *written)  {  	u32 flags = 0;  	int i; @@ -1238,8 +1238,7 @@ ecryptfs_write_header_metadata(char *virt,  	header_extent_size = (u32)crypt_stat->extent_size;  	num_header_extents_at_front = -		(u16)(crypt_stat->num_header_bytes_at_front -		      / crypt_stat->extent_size); +		(u16)(crypt_stat->metadata_size / crypt_stat->extent_size);  	put_unaligned_be32(header_extent_size, virt);  	virt += 4;  	put_unaligned_be16(num_header_extents_at_front, virt); @@ -1292,7 +1291,8 @@ static int ecryptfs_write_headers_virt(char *page_virt, size_t max,  	offset = ECRYPTFS_FILE_SIZE_BYTES;  	write_ecryptfs_marker((page_virt + offset), &written);  	offset += written; -	write_ecryptfs_flags((page_virt + offset), crypt_stat, &written); +	ecryptfs_write_crypt_stat_flags((page_virt + offset), crypt_stat, +					&written);  	offset += written;  	ecryptfs_write_header_metadata((page_virt + offset), crypt_stat,  				       &written); @@ -1382,7 +1382,7 @@ int ecryptfs_write_metadata(struct dentry *ecryptfs_dentry)  		rc = -EINVAL;  		goto out;  	} -	virt_len = crypt_stat->num_header_bytes_at_front; +	virt_len = crypt_stat->metadata_size;  	order = get_order(virt_len);  	/* Released in this function */  	virt = (char *)ecryptfs_get_zeroed_pages(GFP_KERNEL, order); @@ -1428,16 +1428,15 @@ static int parse_header_metadata(struct ecryptfs_crypt_stat *crypt_stat,  	header_extent_size = get_unaligned_be32(virt);  	virt += sizeof(__be32);  	num_header_extents_at_front = get_unaligned_be16(virt); -	crypt_stat->num_header_bytes_at_front = -		(((size_t)num_header_extents_at_front -		  * (size_t)header_extent_size)); +	crypt_stat->metadata_size = (((size_t)num_header_extents_at_front +				     * (size_t)header_extent_size));  	(*bytes_read) = (sizeof(__be32) + sizeof(__be16));  	if ((validate_header_size == ECRYPTFS_VALIDATE_HEADER_SIZE) -	    && (crypt_stat->num_header_bytes_at_front +	    && (crypt_stat->metadata_size  		< ECRYPTFS_MINIMUM_HEADER_EXTENT_SIZE)) {  		rc = -EINVAL;  		printk(KERN_WARNING "Invalid header size: [%zd]\n", -		       crypt_stat->num_header_bytes_at_front); +		       crypt_stat->metadata_size);  	}  	return rc;  } @@ -1452,8 +1451,7 @@ static int parse_header_metadata(struct ecryptfs_crypt_stat *crypt_stat,   */  static void set_default_header_data(struct ecryptfs_crypt_stat *crypt_stat)  { -	crypt_stat->num_header_bytes_at_front = -		ECRYPTFS_MINIMUM_HEADER_EXTENT_SIZE; +	crypt_stat->metadata_size = ECRYPTFS_MINIMUM_HEADER_EXTENT_SIZE;  }  /** @@ -1607,6 +1605,7 @@ int ecryptfs_read_metadata(struct dentry *ecryptfs_dentry)  						ecryptfs_dentry,  						ECRYPTFS_VALIDATE_HEADER_SIZE);  	if (rc) { +		memset(page_virt, 0, PAGE_CACHE_SIZE);  		rc = ecryptfs_read_xattr_region(page_virt, ecryptfs_inode);  		if (rc) {  			printk(KERN_DEBUG "Valid eCryptfs headers not found in "  |