eCryptfs: Copy lower directory inode times and size on link
authorTyler Hicks <tyhicks@linux.vnet.ibm.com>
Tue, 23 Mar 2010 23:09:02 +0000 (18:09 -0500)
committerTyler Hicks <tyhicks@linux.vnet.ibm.com>
Mon, 19 Apr 2010 19:42:15 +0000 (14:42 -0500)
The timestamps and size of a lower inode involved in a link() call was
being copied to the upper parent inode.  Instead, we should be
copying lower parent inode's timestamps and size to the upper parent
inode.  I discovered this bug using the POSIX test suite at Tuxera.

Signed-off-by: Tyler Hicks <tyhicks@linux.vnet.ibm.com>
fs/ecryptfs/inode.c

index efd4f47d530c28a737ba272e8069d7f5c650bf48..15b424837c18124278f2f9590f389a8c53bea269 100644 (file)
@@ -456,8 +456,8 @@ static int ecryptfs_link(struct dentry *old_dentry, struct inode *dir,
        rc = ecryptfs_interpose(lower_new_dentry, new_dentry, dir->i_sb, 0);
        if (rc)
                goto out_lock;
-       fsstack_copy_attr_times(dir, lower_new_dentry->d_inode);
-       fsstack_copy_inode_size(dir, lower_new_dentry->d_inode);
+       fsstack_copy_attr_times(dir, lower_dir_dentry->d_inode);
+       fsstack_copy_inode_size(dir, lower_dir_dentry->d_inode);
        old_dentry->d_inode->i_nlink =
                ecryptfs_inode_to_lower(old_dentry->d_inode)->i_nlink;
        i_size_write(new_dentry->d_inode, file_size_save);