ecryptfs: don't ignore return value from lock_rename
Signed-off-by: Erez Zadok <ezk@cs.sunysb.edu> Cc: Dustin Kirkland <kirkland@canonical.com> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: Tyler Hicks <tyhicks@linux.vnet.ibm.com>
This commit is contained in:
parent
e27759d7a3
commit
0d132f7364
1 changed files with 12 additions and 1 deletions
|
@ -614,6 +614,7 @@ ecryptfs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
||||||
struct dentry *lower_new_dentry;
|
struct dentry *lower_new_dentry;
|
||||||
struct dentry *lower_old_dir_dentry;
|
struct dentry *lower_old_dir_dentry;
|
||||||
struct dentry *lower_new_dir_dentry;
|
struct dentry *lower_new_dir_dentry;
|
||||||
|
struct dentry *trap = NULL;
|
||||||
|
|
||||||
lower_old_dentry = ecryptfs_dentry_to_lower(old_dentry);
|
lower_old_dentry = ecryptfs_dentry_to_lower(old_dentry);
|
||||||
lower_new_dentry = ecryptfs_dentry_to_lower(new_dentry);
|
lower_new_dentry = ecryptfs_dentry_to_lower(new_dentry);
|
||||||
|
@ -621,7 +622,17 @@ ecryptfs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
||||||
dget(lower_new_dentry);
|
dget(lower_new_dentry);
|
||||||
lower_old_dir_dentry = dget_parent(lower_old_dentry);
|
lower_old_dir_dentry = dget_parent(lower_old_dentry);
|
||||||
lower_new_dir_dentry = dget_parent(lower_new_dentry);
|
lower_new_dir_dentry = dget_parent(lower_new_dentry);
|
||||||
lock_rename(lower_old_dir_dentry, lower_new_dir_dentry);
|
trap = lock_rename(lower_old_dir_dentry, lower_new_dir_dentry);
|
||||||
|
/* source should not be ancestor of target */
|
||||||
|
if (trap == lower_old_dentry) {
|
||||||
|
rc = -EINVAL;
|
||||||
|
goto out_lock;
|
||||||
|
}
|
||||||
|
/* target should not be ancestor of source */
|
||||||
|
if (trap == lower_new_dentry) {
|
||||||
|
rc = -ENOTEMPTY;
|
||||||
|
goto out_lock;
|
||||||
|
}
|
||||||
rc = vfs_rename(lower_old_dir_dentry->d_inode, lower_old_dentry,
|
rc = vfs_rename(lower_old_dir_dentry->d_inode, lower_old_dentry,
|
||||||
lower_new_dir_dentry->d_inode, lower_new_dentry);
|
lower_new_dir_dentry->d_inode, lower_new_dentry);
|
||||||
if (rc)
|
if (rc)
|
||||||
|
|
Loading…
Reference in a new issue