Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ecryptfs/ecryptfs-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ecryptfs/ecryptfs-2.6: eCryptfs: Turn lower lookup error messages into debug messages eCryptfs: Copy lower directory inode times and size on link ecryptfs: fix use with tmpfs by removing d_drop from ecryptfs_destroy_inode ecryptfs: fix error code for missing xattrs in lower fs eCryptfs: Decrypt symlink target for stat size eCryptfs: Strip metadata in xattr flag in encrypted view eCryptfs: Clear buffer before reading in metadata xattr eCryptfs: Rename ecryptfs_crypt_stat.num_header_bytes_at_front eCryptfs: Fix metadata in xattr feature regression
This commit is contained in:
@@ -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 "
|
||||
|
Reference in New Issue
Block a user