mirror of
https://github.com/torvalds/linux.git
synced 2026-06-09 07:03:37 +02:00
f2fs: switch to fscrypt_prepare_rename()
Reviewed-by: Chao Yu <yuchao0@huawei.com> Signed-off-by: Eric Biggers <ebiggers@google.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
parent
aeaac517a1
commit
9ab470eaf8
|
|
@ -797,18 +797,6 @@ static int f2fs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
||||||
if (unlikely(f2fs_cp_error(sbi)))
|
if (unlikely(f2fs_cp_error(sbi)))
|
||||||
return -EIO;
|
return -EIO;
|
||||||
|
|
||||||
if ((f2fs_encrypted_inode(old_dir) &&
|
|
||||||
!fscrypt_has_encryption_key(old_dir)) ||
|
|
||||||
(f2fs_encrypted_inode(new_dir) &&
|
|
||||||
!fscrypt_has_encryption_key(new_dir)))
|
|
||||||
return -ENOKEY;
|
|
||||||
|
|
||||||
if ((old_dir != new_dir) && f2fs_encrypted_inode(new_dir) &&
|
|
||||||
!fscrypt_has_permitted_context(new_dir, old_inode)) {
|
|
||||||
err = -EPERM;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_inode_flag_set(new_dir, FI_PROJ_INHERIT) &&
|
if (is_inode_flag_set(new_dir, FI_PROJ_INHERIT) &&
|
||||||
(!projid_eq(F2FS_I(new_dir)->i_projid,
|
(!projid_eq(F2FS_I(new_dir)->i_projid,
|
||||||
F2FS_I(old_dentry->d_inode)->i_projid)))
|
F2FS_I(old_dentry->d_inode)->i_projid)))
|
||||||
|
|
@ -999,18 +987,6 @@ static int f2fs_cross_rename(struct inode *old_dir, struct dentry *old_dentry,
|
||||||
if (unlikely(f2fs_cp_error(sbi)))
|
if (unlikely(f2fs_cp_error(sbi)))
|
||||||
return -EIO;
|
return -EIO;
|
||||||
|
|
||||||
if ((f2fs_encrypted_inode(old_dir) &&
|
|
||||||
!fscrypt_has_encryption_key(old_dir)) ||
|
|
||||||
(f2fs_encrypted_inode(new_dir) &&
|
|
||||||
!fscrypt_has_encryption_key(new_dir)))
|
|
||||||
return -ENOKEY;
|
|
||||||
|
|
||||||
if ((f2fs_encrypted_inode(old_dir) || f2fs_encrypted_inode(new_dir)) &&
|
|
||||||
(old_dir != new_dir) &&
|
|
||||||
(!fscrypt_has_permitted_context(new_dir, old_inode) ||
|
|
||||||
!fscrypt_has_permitted_context(old_dir, new_inode)))
|
|
||||||
return -EPERM;
|
|
||||||
|
|
||||||
if ((is_inode_flag_set(new_dir, FI_PROJ_INHERIT) &&
|
if ((is_inode_flag_set(new_dir, FI_PROJ_INHERIT) &&
|
||||||
!projid_eq(F2FS_I(new_dir)->i_projid,
|
!projid_eq(F2FS_I(new_dir)->i_projid,
|
||||||
F2FS_I(old_dentry->d_inode)->i_projid)) ||
|
F2FS_I(old_dentry->d_inode)->i_projid)) ||
|
||||||
|
|
@ -1150,9 +1126,16 @@ static int f2fs_rename2(struct inode *old_dir, struct dentry *old_dentry,
|
||||||
struct inode *new_dir, struct dentry *new_dentry,
|
struct inode *new_dir, struct dentry *new_dentry,
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
|
int err;
|
||||||
|
|
||||||
if (flags & ~(RENAME_NOREPLACE | RENAME_EXCHANGE | RENAME_WHITEOUT))
|
if (flags & ~(RENAME_NOREPLACE | RENAME_EXCHANGE | RENAME_WHITEOUT))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
err = fscrypt_prepare_rename(old_dir, old_dentry, new_dir, new_dentry,
|
||||||
|
flags);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
|
||||||
if (flags & RENAME_EXCHANGE) {
|
if (flags & RENAME_EXCHANGE) {
|
||||||
return f2fs_cross_rename(old_dir, old_dentry,
|
return f2fs_cross_rename(old_dir, old_dentry,
|
||||||
new_dir, new_dentry);
|
new_dir, new_dentry);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user