mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-09 04:10:18 +09:00
eCryptfs: Add getattr function
commit f8f484d1b6 upstream.
The i_blocks field of an eCryptfs inode cannot be trusted, but
generic_fillattr() uses it to instantiate the blocks field of a stat()
syscall when a filesystem doesn't implement its own getattr(). Users
have noticed that the output of du is incorrect on newly created files.
This patch creates ecryptfs_getattr() which calls into the lower
filesystem's getattr() so that eCryptfs can use its kstat.blocks value
after calling generic_fillattr(). It is important to note that the
block count includes the eCryptfs metadata stored in the beginning of
the lower file plus any padding used to fill an extent before
encryption.
https://bugs.launchpad.net/ecryptfs/+bug/390833
Reported-by: Dominic Sacré <dominic.sacre@gmx.de>
Signed-off-by: Tyler Hicks <tyhicks@linux.vnet.ibm.com>
Cc: Tim Gardner <timg@tpi.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
be6520201b
commit
081312e8c1
@@ -971,6 +971,21 @@ out:
|
||||
return rc;
|
||||
}
|
||||
|
||||
int ecryptfs_getattr(struct vfsmount *mnt, struct dentry *dentry,
|
||||
struct kstat *stat)
|
||||
{
|
||||
struct kstat lower_stat;
|
||||
int rc;
|
||||
|
||||
rc = vfs_getattr(ecryptfs_dentry_to_lower_mnt(dentry),
|
||||
ecryptfs_dentry_to_lower(dentry), &lower_stat);
|
||||
if (!rc) {
|
||||
generic_fillattr(dentry->d_inode, stat);
|
||||
stat->blocks = lower_stat.blocks;
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
|
||||
int
|
||||
ecryptfs_setxattr(struct dentry *dentry, const char *name, const void *value,
|
||||
size_t size, int flags)
|
||||
@@ -1100,6 +1115,7 @@ const struct inode_operations ecryptfs_dir_iops = {
|
||||
const struct inode_operations ecryptfs_main_iops = {
|
||||
.permission = ecryptfs_permission,
|
||||
.setattr = ecryptfs_setattr,
|
||||
.getattr = ecryptfs_getattr,
|
||||
.setxattr = ecryptfs_setxattr,
|
||||
.getxattr = ecryptfs_getxattr,
|
||||
.listxattr = ecryptfs_listxattr,
|
||||
|
||||
Reference in New Issue
Block a user