diff options
author | Erez Zadok <ezk@cs.sunysb.edu> | 2009-12-05 21:17:09 -0500 |
---|---|---|
committer | Tyler Hicks <tyhicks@linux.vnet.ibm.com> | 2010-01-19 23:35:59 -0500 |
commit | 0d132f7364694da8f7cafd49e2fc2721b73e96e4 (patch) | |
tree | 8603d76664307d039830796cc04a0e0363cf3b60 /fs | |
parent | e27759d7a333d1f25d628c4f7caf845c51be51c2 (diff) |
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>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/ecryptfs/inode.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/fs/ecryptfs/inode.c b/fs/ecryptfs/inode.c index 5726d7adaf5b..764dc777b268 100644 --- a/fs/ecryptfs/inode.c +++ b/fs/ecryptfs/inode.c | |||
@@ -614,6 +614,7 @@ ecryptfs_rename(struct inode *old_dir, struct dentry *old_dentry, | |||
614 | struct dentry *lower_new_dentry; | 614 | struct dentry *lower_new_dentry; |
615 | struct dentry *lower_old_dir_dentry; | 615 | struct dentry *lower_old_dir_dentry; |
616 | struct dentry *lower_new_dir_dentry; | 616 | struct dentry *lower_new_dir_dentry; |
617 | struct dentry *trap = NULL; | ||
617 | 618 | ||
618 | lower_old_dentry = ecryptfs_dentry_to_lower(old_dentry); | 619 | lower_old_dentry = ecryptfs_dentry_to_lower(old_dentry); |
619 | lower_new_dentry = ecryptfs_dentry_to_lower(new_dentry); | 620 | lower_new_dentry = ecryptfs_dentry_to_lower(new_dentry); |
@@ -621,7 +622,17 @@ ecryptfs_rename(struct inode *old_dir, struct dentry *old_dentry, | |||
621 | dget(lower_new_dentry); | 622 | dget(lower_new_dentry); |
622 | lower_old_dir_dentry = dget_parent(lower_old_dentry); | 623 | lower_old_dir_dentry = dget_parent(lower_old_dentry); |
623 | lower_new_dir_dentry = dget_parent(lower_new_dentry); | 624 | lower_new_dir_dentry = dget_parent(lower_new_dentry); |
624 | lock_rename(lower_old_dir_dentry, lower_new_dir_dentry); | 625 | trap = lock_rename(lower_old_dir_dentry, lower_new_dir_dentry); |
626 | /* source should not be ancestor of target */ | ||
627 | if (trap == lower_old_dentry) { | ||
628 | rc = -EINVAL; | ||
629 | goto out_lock; | ||
630 | } | ||
631 | /* target should not be ancestor of source */ | ||
632 | if (trap == lower_new_dentry) { | ||
633 | rc = -ENOTEMPTY; | ||
634 | goto out_lock; | ||
635 | } | ||
625 | rc = vfs_rename(lower_old_dir_dentry->d_inode, lower_old_dentry, | 636 | rc = vfs_rename(lower_old_dir_dentry->d_inode, lower_old_dentry, |
626 | lower_new_dir_dentry->d_inode, lower_new_dentry); | 637 | lower_new_dir_dentry->d_inode, lower_new_dentry); |
627 | if (rc) | 638 | if (rc) |