Skip to content

Commit 74dd7c9

Browse files
author
Al Viro
committed
ecryptfs_rename(): verify that lower dentries are still OK after lock_rename()
We get lower layer dentries, find their parents, do lock_rename() and proceed to vfs_rename(). However, we do not check that dentries still have the same parents and are not unlinked. Need to check that... Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
1 parent b07581d commit 74dd7c9

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

fs/ecryptfs/inode.c

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -593,11 +593,16 @@ ecryptfs_rename(struct inode *old_dir, struct dentry *old_dentry,
593593
lower_new_dir_dentry = dget_parent(lower_new_dentry);
594594
target_inode = d_inode(new_dentry);
595595
trap = lock_rename(lower_old_dir_dentry, lower_new_dir_dentry);
596+
rc = -EINVAL;
597+
if (lower_old_dentry->d_parent != lower_old_dir_dentry)
598+
goto out_lock;
599+
if (lower_new_dentry->d_parent != lower_new_dir_dentry)
600+
goto out_lock;
601+
if (d_unhashed(lower_old_dentry) || d_unhashed(lower_new_dentry))
602+
goto out_lock;
596603
/* source should not be ancestor of target */
597-
if (trap == lower_old_dentry) {
598-
rc = -EINVAL;
604+
if (trap == lower_old_dentry)
599605
goto out_lock;
600-
}
601606
/* target should not be ancestor of source */
602607
if (trap == lower_new_dentry) {
603608
rc = -ENOTEMPTY;

0 commit comments

Comments
 (0)