|
@@ -593,11 +593,16 @@ ecryptfs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
|
|
lower_new_dir_dentry = dget_parent(lower_new_dentry);
|
|
|
target_inode = d_inode(new_dentry);
|
|
|
trap = lock_rename(lower_old_dir_dentry, lower_new_dir_dentry);
|
|
|
+ rc = -EINVAL;
|
|
|
+ if (lower_old_dentry->d_parent != lower_old_dir_dentry)
|
|
|
+ goto out_lock;
|
|
|
+ if (lower_new_dentry->d_parent != lower_new_dir_dentry)
|
|
|
+ goto out_lock;
|
|
|
+ if (d_unhashed(lower_old_dentry) || d_unhashed(lower_new_dentry))
|
|
|
+ goto out_lock;
|
|
|
/* source should not be ancestor of target */
|
|
|
- if (trap == lower_old_dentry) {
|
|
|
- rc = -EINVAL;
|
|
|
+ if (trap == lower_old_dentry)
|
|
|
goto out_lock;
|
|
|
- }
|
|
|
/* target should not be ancestor of source */
|
|
|
if (trap == lower_new_dentry) {
|
|
|
rc = -ENOTEMPTY;
|