mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-16 13:41:48 -04:00
ecryptfs: factor out a ecryptfs_iattr_to_lower helper
Prepare for using the code to create a lower struct iattr in multiple places. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Tyler Hicks <code@tyhicks.com>
This commit is contained in:
committed by
Tyler Hicks
parent
081447ecfc
commit
5d1f0e8cd9
@@ -677,6 +677,20 @@ static const char *ecryptfs_get_link(struct dentry *dentry,
|
||||
return buf;
|
||||
}
|
||||
|
||||
static void ecryptfs_iattr_to_lower(struct iattr *lower_ia,
|
||||
const struct iattr *ia)
|
||||
{
|
||||
memcpy(lower_ia, ia, sizeof(*lower_ia));
|
||||
if (ia->ia_valid & ATTR_FILE)
|
||||
lower_ia->ia_file = ecryptfs_file_to_lower(ia->ia_file);
|
||||
/*
|
||||
* If the mode change is for clearing setuid/setgid bits, allow the lower
|
||||
* file system to interpret this in its own way.
|
||||
*/
|
||||
if (lower_ia->ia_valid & (ATTR_KILL_SUID | ATTR_KILL_SGID))
|
||||
lower_ia->ia_valid &= ~ATTR_MODE;
|
||||
}
|
||||
|
||||
/**
|
||||
* upper_size_to_lower_size
|
||||
* @crypt_stat: Crypt_stat associated with file
|
||||
@@ -921,21 +935,13 @@ static int ecryptfs_setattr(struct mnt_idmap *idmap,
|
||||
if (rc)
|
||||
goto out;
|
||||
|
||||
memcpy(&lower_ia, ia, sizeof(lower_ia));
|
||||
if (ia->ia_valid & ATTR_FILE)
|
||||
lower_ia.ia_file = ecryptfs_file_to_lower(ia->ia_file);
|
||||
ecryptfs_iattr_to_lower(&lower_ia, ia);
|
||||
if (ia->ia_valid & ATTR_SIZE) {
|
||||
rc = truncate_upper(dentry, ia, &lower_ia);
|
||||
if (rc < 0)
|
||||
goto out;
|
||||
}
|
||||
|
||||
/*
|
||||
* mode change is for clearing setuid/setgid bits. Allow lower fs
|
||||
* to interpret this in its own way.
|
||||
*/
|
||||
if (lower_ia.ia_valid & (ATTR_KILL_SUID | ATTR_KILL_SGID))
|
||||
lower_ia.ia_valid &= ~ATTR_MODE;
|
||||
|
||||
inode_lock(d_inode(lower_dentry));
|
||||
rc = notify_change(&nop_mnt_idmap, lower_dentry, &lower_ia, NULL);
|
||||
|
||||
Reference in New Issue
Block a user