]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ecryptfs: factor out a ecryptfs_iattr_to_lower helper
authorChristoph Hellwig <hch@lst.de>
Wed, 8 Apr 2026 06:06:41 +0000 (08:06 +0200)
committerTyler Hicks <code@tyhicks.com>
Wed, 8 Apr 2026 23:54:03 +0000 (18:54 -0500)
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>
fs/ecryptfs/inode.c

index 4ec3e76f05628b359bef34a4dae13f2683a7c48b..a06b84033ff39b63509e46a8b949f09780419046 100644 (file)
@@ -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);