* [f2fs-dev] [PATCH 0/3] f2fs: use generic helpers for FS_IOC_{SETFLAGS, FSSETXATTR}
@ 2019-07-01 20:26 Eric Biggers
2019-07-01 20:26 ` [f2fs-dev] [PATCH 1/3] f2fs: use generic checking and prep function for FS_IOC_SETFLAGS Eric Biggers
` (2 more replies)
0 siblings, 3 replies; 10+ messages in thread
From: Eric Biggers @ 2019-07-01 20:26 UTC (permalink / raw)
To: Darrick J . Wong; +Cc: linux-fsdevel, Jaegeuk Kim, linux-f2fs-devel
This series converts f2fs to use the new VFS helper functions that check
the parameters of the FS_IOC_SETFLAGS and FS_IOC_FSSETXATTR ioctls.
This applies to the merge of the f2fs/dev and xfs/vfs-for-next branches:
https://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs.git/log/?h=dev
https://git.kernel.org/pub/scm/fs/xfs/xfs-linux.git/log/?h=vfs-for-next
i.e., this series will apply to mainline after these two branches get
merged into it for 5.3. Don't apply it to the f2fs tree by itself yet.
See: https://lore.kernel.org/lkml/20190701110603.5abcbb2c@canb.auug.org.au/T/#u
Eric Biggers (3):
f2fs: use generic checking and prep function for FS_IOC_SETFLAGS
f2fs: use generic checking function for FS_IOC_FSSETXATTR
f2fs: remove redundant check from f2fs_setflags_common()
fs/f2fs/file.c | 63 ++++++++++++++++++--------------------------------
1 file changed, 23 insertions(+), 40 deletions(-)
--
2.22.0.410.gd8fdbe21b5-goog
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
^ permalink raw reply [flat|nested] 10+ messages in thread
* [f2fs-dev] [PATCH 1/3] f2fs: use generic checking and prep function for FS_IOC_SETFLAGS
2019-07-01 20:26 [f2fs-dev] [PATCH 0/3] f2fs: use generic helpers for FS_IOC_{SETFLAGS, FSSETXATTR} Eric Biggers
@ 2019-07-01 20:26 ` Eric Biggers
2019-07-03 1:58 ` Chao Yu
2019-07-07 20:41 ` Darrick J. Wong
2019-07-01 20:26 ` [f2fs-dev] [PATCH 2/3] f2fs: use generic checking function for FS_IOC_FSSETXATTR Eric Biggers
2019-07-01 20:26 ` [f2fs-dev] [PATCH 3/3] f2fs: remove redundant check from f2fs_setflags_common() Eric Biggers
2 siblings, 2 replies; 10+ messages in thread
From: Eric Biggers @ 2019-07-01 20:26 UTC (permalink / raw)
To: Darrick J . Wong; +Cc: linux-fsdevel, Jaegeuk Kim, linux-f2fs-devel
From: Eric Biggers <ebiggers@google.com>
Make the f2fs implementation of FS_IOC_SETFLAGS use the new VFS helper
function vfs_ioc_setflags_prepare().
This is based on a patch from Darrick Wong, but reworked to apply after
commit 360985573b55 ("f2fs: separate f2fs i_flags from fs_flags and ext4
i_flags").
Originally-from: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Eric Biggers <ebiggers@google.com>
---
fs/f2fs/file.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index e7c368db81851f..b5b941e6448657 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -1765,7 +1765,8 @@ static int f2fs_ioc_getflags(struct file *filp, unsigned long arg)
static int f2fs_ioc_setflags(struct file *filp, unsigned long arg)
{
struct inode *inode = file_inode(filp);
- u32 fsflags;
+ struct f2fs_inode_info *fi = F2FS_I(inode);
+ u32 fsflags, old_fsflags;
u32 iflags;
int ret;
@@ -1789,8 +1790,14 @@ static int f2fs_ioc_setflags(struct file *filp, unsigned long arg)
inode_lock(inode);
+ old_fsflags = f2fs_iflags_to_fsflags(fi->i_flags);
+ ret = vfs_ioc_setflags_prepare(inode, old_fsflags, fsflags);
+ if (ret)
+ goto out;
+
ret = f2fs_setflags_common(inode, iflags,
f2fs_fsflags_to_iflags(F2FS_SETTABLE_FS_FL));
+out:
inode_unlock(inode);
mnt_drop_write_file(filp);
return ret;
--
2.22.0.410.gd8fdbe21b5-goog
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [f2fs-dev] [PATCH 2/3] f2fs: use generic checking function for FS_IOC_FSSETXATTR
2019-07-01 20:26 [f2fs-dev] [PATCH 0/3] f2fs: use generic helpers for FS_IOC_{SETFLAGS, FSSETXATTR} Eric Biggers
2019-07-01 20:26 ` [f2fs-dev] [PATCH 1/3] f2fs: use generic checking and prep function for FS_IOC_SETFLAGS Eric Biggers
@ 2019-07-01 20:26 ` Eric Biggers
2019-07-03 1:58 ` Chao Yu
2019-07-07 20:41 ` Darrick J. Wong
2019-07-01 20:26 ` [f2fs-dev] [PATCH 3/3] f2fs: remove redundant check from f2fs_setflags_common() Eric Biggers
2 siblings, 2 replies; 10+ messages in thread
From: Eric Biggers @ 2019-07-01 20:26 UTC (permalink / raw)
To: Darrick J . Wong; +Cc: linux-fsdevel, Jaegeuk Kim, linux-f2fs-devel
From: Eric Biggers <ebiggers@google.com>
Make the f2fs implementation of FS_IOC_FSSETXATTR use the new VFS helper
function vfs_ioc_fssetxattr_check(), and remove the project quota check
since it's now done by the helper function.
This is based on a patch from Darrick Wong, but reworked to apply after
commit 360985573b55 ("f2fs: separate f2fs i_flags from fs_flags and ext4
i_flags").
Originally-from: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Eric Biggers <ebiggers@google.com>
---
fs/f2fs/file.c | 45 ++++++++++++++-------------------------------
1 file changed, 14 insertions(+), 31 deletions(-)
diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index b5b941e6448657..ae1a54ecc9fccc 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -2857,52 +2857,32 @@ static inline u32 f2fs_xflags_to_iflags(u32 xflags)
return iflags;
}
-static int f2fs_ioc_fsgetxattr(struct file *filp, unsigned long arg)
+static void f2fs_fill_fsxattr(struct inode *inode, struct fsxattr *fa)
{
- struct inode *inode = file_inode(filp);
struct f2fs_inode_info *fi = F2FS_I(inode);
- struct fsxattr fa;
- memset(&fa, 0, sizeof(struct fsxattr));
- fa.fsx_xflags = f2fs_iflags_to_xflags(fi->i_flags);
+ simple_fill_fsxattr(fa, f2fs_iflags_to_xflags(fi->i_flags));
if (f2fs_sb_has_project_quota(F2FS_I_SB(inode)))
- fa.fsx_projid = (__u32)from_kprojid(&init_user_ns,
- fi->i_projid);
-
- if (copy_to_user((struct fsxattr __user *)arg, &fa, sizeof(fa)))
- return -EFAULT;
- return 0;
+ fa->fsx_projid = from_kprojid(&init_user_ns, fi->i_projid);
}
-static int f2fs_ioctl_check_project(struct inode *inode, struct fsxattr *fa)
+static int f2fs_ioc_fsgetxattr(struct file *filp, unsigned long arg)
{
- /*
- * Project Quota ID state is only allowed to change from within the init
- * namespace. Enforce that restriction only if we are trying to change
- * the quota ID state. Everything else is allowed in user namespaces.
- */
- if (current_user_ns() == &init_user_ns)
- return 0;
-
- if (__kprojid_val(F2FS_I(inode)->i_projid) != fa->fsx_projid)
- return -EINVAL;
+ struct inode *inode = file_inode(filp);
+ struct fsxattr fa;
- if (F2FS_I(inode)->i_flags & F2FS_PROJINHERIT_FL) {
- if (!(fa->fsx_xflags & FS_XFLAG_PROJINHERIT))
- return -EINVAL;
- } else {
- if (fa->fsx_xflags & FS_XFLAG_PROJINHERIT)
- return -EINVAL;
- }
+ f2fs_fill_fsxattr(inode, &fa);
+ if (copy_to_user((struct fsxattr __user *)arg, &fa, sizeof(fa)))
+ return -EFAULT;
return 0;
}
static int f2fs_ioc_fssetxattr(struct file *filp, unsigned long arg)
{
struct inode *inode = file_inode(filp);
- struct fsxattr fa;
+ struct fsxattr fa, old_fa;
u32 iflags;
int err;
@@ -2925,9 +2905,12 @@ static int f2fs_ioc_fssetxattr(struct file *filp, unsigned long arg)
return err;
inode_lock(inode);
- err = f2fs_ioctl_check_project(inode, &fa);
+
+ f2fs_fill_fsxattr(inode, &old_fa);
+ err = vfs_ioc_fssetxattr_check(inode, &old_fa, &fa);
if (err)
goto out;
+
err = f2fs_setflags_common(inode, iflags,
f2fs_xflags_to_iflags(F2FS_SUPPORTED_XFLAGS));
if (err)
--
2.22.0.410.gd8fdbe21b5-goog
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [f2fs-dev] [PATCH 3/3] f2fs: remove redundant check from f2fs_setflags_common()
2019-07-01 20:26 [f2fs-dev] [PATCH 0/3] f2fs: use generic helpers for FS_IOC_{SETFLAGS, FSSETXATTR} Eric Biggers
2019-07-01 20:26 ` [f2fs-dev] [PATCH 1/3] f2fs: use generic checking and prep function for FS_IOC_SETFLAGS Eric Biggers
2019-07-01 20:26 ` [f2fs-dev] [PATCH 2/3] f2fs: use generic checking function for FS_IOC_FSSETXATTR Eric Biggers
@ 2019-07-01 20:26 ` Eric Biggers
2019-07-03 1:58 ` Chao Yu
2019-07-07 20:42 ` Darrick J. Wong
2 siblings, 2 replies; 10+ messages in thread
From: Eric Biggers @ 2019-07-01 20:26 UTC (permalink / raw)
To: Darrick J . Wong; +Cc: linux-fsdevel, Jaegeuk Kim, linux-f2fs-devel
From: Eric Biggers <ebiggers@google.com>
Now that f2fs_ioc_setflags() and f2fs_ioc_fssetxattr() call the VFS
helper functions which check for permission to change the immutable and
append-only flags, it's no longer needed to do this check in
f2fs_setflags_common() too. So remove it.
This is based on a patch from Darrick Wong, but reworked to apply after
commit 360985573b55 ("f2fs: separate f2fs i_flags from fs_flags and ext4
i_flags").
Originally-from: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Eric Biggers <ebiggers@google.com>
---
fs/f2fs/file.c | 9 +--------
1 file changed, 1 insertion(+), 8 deletions(-)
diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index ae1a54ecc9fccc..e8b81f6f5c2b15 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -1648,19 +1648,12 @@ static int f2fs_file_flush(struct file *file, fl_owner_t id)
static int f2fs_setflags_common(struct inode *inode, u32 iflags, u32 mask)
{
struct f2fs_inode_info *fi = F2FS_I(inode);
- u32 oldflags;
/* Is it quota file? Do not allow user to mess with it */
if (IS_NOQUOTA(inode))
return -EPERM;
- oldflags = fi->i_flags;
-
- if ((iflags ^ oldflags) & (F2FS_APPEND_FL | F2FS_IMMUTABLE_FL))
- if (!capable(CAP_LINUX_IMMUTABLE))
- return -EPERM;
-
- fi->i_flags = iflags | (oldflags & ~mask);
+ fi->i_flags = iflags | (fi->i_flags & ~mask);
if (fi->i_flags & F2FS_PROJINHERIT_FL)
set_inode_flag(inode, FI_PROJ_INHERIT);
--
2.22.0.410.gd8fdbe21b5-goog
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [f2fs-dev] [PATCH 1/3] f2fs: use generic checking and prep function for FS_IOC_SETFLAGS
2019-07-01 20:26 ` [f2fs-dev] [PATCH 1/3] f2fs: use generic checking and prep function for FS_IOC_SETFLAGS Eric Biggers
@ 2019-07-03 1:58 ` Chao Yu
2019-07-07 20:41 ` Darrick J. Wong
1 sibling, 0 replies; 10+ messages in thread
From: Chao Yu @ 2019-07-03 1:58 UTC (permalink / raw)
To: Eric Biggers, Darrick J . Wong
Cc: linux-fsdevel, Jaegeuk Kim, linux-f2fs-devel
On 2019/7/2 4:26, Eric Biggers wrote:
> From: Eric Biggers <ebiggers@google.com>
>
> Make the f2fs implementation of FS_IOC_SETFLAGS use the new VFS helper
> function vfs_ioc_setflags_prepare().
>
> This is based on a patch from Darrick Wong, but reworked to apply after
> commit 360985573b55 ("f2fs: separate f2fs i_flags from fs_flags and ext4
> i_flags").
>
> Originally-from: Darrick J. Wong <darrick.wong@oracle.com>
> Signed-off-by: Eric Biggers <ebiggers@google.com>
Reviewed-by: Chao Yu <yuchao0@huawei.com>
Thanks,
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [f2fs-dev] [PATCH 2/3] f2fs: use generic checking function for FS_IOC_FSSETXATTR
2019-07-01 20:26 ` [f2fs-dev] [PATCH 2/3] f2fs: use generic checking function for FS_IOC_FSSETXATTR Eric Biggers
@ 2019-07-03 1:58 ` Chao Yu
2019-07-07 20:41 ` Darrick J. Wong
1 sibling, 0 replies; 10+ messages in thread
From: Chao Yu @ 2019-07-03 1:58 UTC (permalink / raw)
To: Eric Biggers, Darrick J . Wong
Cc: linux-fsdevel, Jaegeuk Kim, linux-f2fs-devel
On 2019/7/2 4:26, Eric Biggers wrote:
> From: Eric Biggers <ebiggers@google.com>
>
> Make the f2fs implementation of FS_IOC_FSSETXATTR use the new VFS helper
> function vfs_ioc_fssetxattr_check(), and remove the project quota check
> since it's now done by the helper function.
>
> This is based on a patch from Darrick Wong, but reworked to apply after
> commit 360985573b55 ("f2fs: separate f2fs i_flags from fs_flags and ext4
> i_flags").
>
> Originally-from: Darrick J. Wong <darrick.wong@oracle.com>
> Signed-off-by: Eric Biggers <ebiggers@google.com>
Reviewed-by: Chao Yu <yuchao0@huawei.com>
Thanks,
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [f2fs-dev] [PATCH 3/3] f2fs: remove redundant check from f2fs_setflags_common()
2019-07-01 20:26 ` [f2fs-dev] [PATCH 3/3] f2fs: remove redundant check from f2fs_setflags_common() Eric Biggers
@ 2019-07-03 1:58 ` Chao Yu
2019-07-07 20:42 ` Darrick J. Wong
1 sibling, 0 replies; 10+ messages in thread
From: Chao Yu @ 2019-07-03 1:58 UTC (permalink / raw)
To: Eric Biggers, Darrick J . Wong
Cc: linux-fsdevel, Jaegeuk Kim, linux-f2fs-devel
On 2019/7/2 4:26, Eric Biggers wrote:
> From: Eric Biggers <ebiggers@google.com>
>
> Now that f2fs_ioc_setflags() and f2fs_ioc_fssetxattr() call the VFS
> helper functions which check for permission to change the immutable and
> append-only flags, it's no longer needed to do this check in
> f2fs_setflags_common() too. So remove it.
>
> This is based on a patch from Darrick Wong, but reworked to apply after
> commit 360985573b55 ("f2fs: separate f2fs i_flags from fs_flags and ext4
> i_flags").
>
> Originally-from: Darrick J. Wong <darrick.wong@oracle.com>
> Signed-off-by: Eric Biggers <ebiggers@google.com>
Reviewed-by: Chao Yu <yuchao0@huawei.com>
Thanks,
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [f2fs-dev] [PATCH 1/3] f2fs: use generic checking and prep function for FS_IOC_SETFLAGS
2019-07-01 20:26 ` [f2fs-dev] [PATCH 1/3] f2fs: use generic checking and prep function for FS_IOC_SETFLAGS Eric Biggers
2019-07-03 1:58 ` Chao Yu
@ 2019-07-07 20:41 ` Darrick J. Wong
1 sibling, 0 replies; 10+ messages in thread
From: Darrick J. Wong @ 2019-07-07 20:41 UTC (permalink / raw)
To: Eric Biggers; +Cc: linux-fsdevel, Jaegeuk Kim, linux-f2fs-devel
On Mon, Jul 01, 2019 at 01:26:28PM -0700, Eric Biggers wrote:
> From: Eric Biggers <ebiggers@google.com>
>
> Make the f2fs implementation of FS_IOC_SETFLAGS use the new VFS helper
> function vfs_ioc_setflags_prepare().
>
> This is based on a patch from Darrick Wong, but reworked to apply after
> commit 360985573b55 ("f2fs: separate f2fs i_flags from fs_flags and ext4
> i_flags").
>
> Originally-from: Darrick J. Wong <darrick.wong@oracle.com>
> Signed-off-by: Eric Biggers <ebiggers@google.com>
LGTM,
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
--D
> ---
> fs/f2fs/file.c | 9 ++++++++-
> 1 file changed, 8 insertions(+), 1 deletion(-)
>
> diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
> index e7c368db81851f..b5b941e6448657 100644
> --- a/fs/f2fs/file.c
> +++ b/fs/f2fs/file.c
> @@ -1765,7 +1765,8 @@ static int f2fs_ioc_getflags(struct file *filp, unsigned long arg)
> static int f2fs_ioc_setflags(struct file *filp, unsigned long arg)
> {
> struct inode *inode = file_inode(filp);
> - u32 fsflags;
> + struct f2fs_inode_info *fi = F2FS_I(inode);
> + u32 fsflags, old_fsflags;
> u32 iflags;
> int ret;
>
> @@ -1789,8 +1790,14 @@ static int f2fs_ioc_setflags(struct file *filp, unsigned long arg)
>
> inode_lock(inode);
>
> + old_fsflags = f2fs_iflags_to_fsflags(fi->i_flags);
> + ret = vfs_ioc_setflags_prepare(inode, old_fsflags, fsflags);
> + if (ret)
> + goto out;
> +
> ret = f2fs_setflags_common(inode, iflags,
> f2fs_fsflags_to_iflags(F2FS_SETTABLE_FS_FL));
> +out:
> inode_unlock(inode);
> mnt_drop_write_file(filp);
> return ret;
> --
> 2.22.0.410.gd8fdbe21b5-goog
>
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [f2fs-dev] [PATCH 2/3] f2fs: use generic checking function for FS_IOC_FSSETXATTR
2019-07-01 20:26 ` [f2fs-dev] [PATCH 2/3] f2fs: use generic checking function for FS_IOC_FSSETXATTR Eric Biggers
2019-07-03 1:58 ` Chao Yu
@ 2019-07-07 20:41 ` Darrick J. Wong
1 sibling, 0 replies; 10+ messages in thread
From: Darrick J. Wong @ 2019-07-07 20:41 UTC (permalink / raw)
To: Eric Biggers; +Cc: linux-fsdevel, Jaegeuk Kim, linux-f2fs-devel
On Mon, Jul 01, 2019 at 01:26:29PM -0700, Eric Biggers wrote:
> From: Eric Biggers <ebiggers@google.com>
>
> Make the f2fs implementation of FS_IOC_FSSETXATTR use the new VFS helper
> function vfs_ioc_fssetxattr_check(), and remove the project quota check
> since it's now done by the helper function.
>
> This is based on a patch from Darrick Wong, but reworked to apply after
> commit 360985573b55 ("f2fs: separate f2fs i_flags from fs_flags and ext4
> i_flags").
>
> Originally-from: Darrick J. Wong <darrick.wong@oracle.com>
> Signed-off-by: Eric Biggers <ebiggers@google.com>
Looks ok,
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
--D
> ---
> fs/f2fs/file.c | 45 ++++++++++++++-------------------------------
> 1 file changed, 14 insertions(+), 31 deletions(-)
>
> diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
> index b5b941e6448657..ae1a54ecc9fccc 100644
> --- a/fs/f2fs/file.c
> +++ b/fs/f2fs/file.c
> @@ -2857,52 +2857,32 @@ static inline u32 f2fs_xflags_to_iflags(u32 xflags)
> return iflags;
> }
>
> -static int f2fs_ioc_fsgetxattr(struct file *filp, unsigned long arg)
> +static void f2fs_fill_fsxattr(struct inode *inode, struct fsxattr *fa)
> {
> - struct inode *inode = file_inode(filp);
> struct f2fs_inode_info *fi = F2FS_I(inode);
> - struct fsxattr fa;
>
> - memset(&fa, 0, sizeof(struct fsxattr));
> - fa.fsx_xflags = f2fs_iflags_to_xflags(fi->i_flags);
> + simple_fill_fsxattr(fa, f2fs_iflags_to_xflags(fi->i_flags));
>
> if (f2fs_sb_has_project_quota(F2FS_I_SB(inode)))
> - fa.fsx_projid = (__u32)from_kprojid(&init_user_ns,
> - fi->i_projid);
> -
> - if (copy_to_user((struct fsxattr __user *)arg, &fa, sizeof(fa)))
> - return -EFAULT;
> - return 0;
> + fa->fsx_projid = from_kprojid(&init_user_ns, fi->i_projid);
> }
>
> -static int f2fs_ioctl_check_project(struct inode *inode, struct fsxattr *fa)
> +static int f2fs_ioc_fsgetxattr(struct file *filp, unsigned long arg)
> {
> - /*
> - * Project Quota ID state is only allowed to change from within the init
> - * namespace. Enforce that restriction only if we are trying to change
> - * the quota ID state. Everything else is allowed in user namespaces.
> - */
> - if (current_user_ns() == &init_user_ns)
> - return 0;
> -
> - if (__kprojid_val(F2FS_I(inode)->i_projid) != fa->fsx_projid)
> - return -EINVAL;
> + struct inode *inode = file_inode(filp);
> + struct fsxattr fa;
>
> - if (F2FS_I(inode)->i_flags & F2FS_PROJINHERIT_FL) {
> - if (!(fa->fsx_xflags & FS_XFLAG_PROJINHERIT))
> - return -EINVAL;
> - } else {
> - if (fa->fsx_xflags & FS_XFLAG_PROJINHERIT)
> - return -EINVAL;
> - }
> + f2fs_fill_fsxattr(inode, &fa);
>
> + if (copy_to_user((struct fsxattr __user *)arg, &fa, sizeof(fa)))
> + return -EFAULT;
> return 0;
> }
>
> static int f2fs_ioc_fssetxattr(struct file *filp, unsigned long arg)
> {
> struct inode *inode = file_inode(filp);
> - struct fsxattr fa;
> + struct fsxattr fa, old_fa;
> u32 iflags;
> int err;
>
> @@ -2925,9 +2905,12 @@ static int f2fs_ioc_fssetxattr(struct file *filp, unsigned long arg)
> return err;
>
> inode_lock(inode);
> - err = f2fs_ioctl_check_project(inode, &fa);
> +
> + f2fs_fill_fsxattr(inode, &old_fa);
> + err = vfs_ioc_fssetxattr_check(inode, &old_fa, &fa);
> if (err)
> goto out;
> +
> err = f2fs_setflags_common(inode, iflags,
> f2fs_xflags_to_iflags(F2FS_SUPPORTED_XFLAGS));
> if (err)
> --
> 2.22.0.410.gd8fdbe21b5-goog
>
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [f2fs-dev] [PATCH 3/3] f2fs: remove redundant check from f2fs_setflags_common()
2019-07-01 20:26 ` [f2fs-dev] [PATCH 3/3] f2fs: remove redundant check from f2fs_setflags_common() Eric Biggers
2019-07-03 1:58 ` Chao Yu
@ 2019-07-07 20:42 ` Darrick J. Wong
1 sibling, 0 replies; 10+ messages in thread
From: Darrick J. Wong @ 2019-07-07 20:42 UTC (permalink / raw)
To: Eric Biggers; +Cc: linux-fsdevel, Jaegeuk Kim, linux-f2fs-devel
On Mon, Jul 01, 2019 at 01:26:30PM -0700, Eric Biggers wrote:
> From: Eric Biggers <ebiggers@google.com>
>
> Now that f2fs_ioc_setflags() and f2fs_ioc_fssetxattr() call the VFS
> helper functions which check for permission to change the immutable and
> append-only flags, it's no longer needed to do this check in
> f2fs_setflags_common() too. So remove it.
>
> This is based on a patch from Darrick Wong, but reworked to apply after
> commit 360985573b55 ("f2fs: separate f2fs i_flags from fs_flags and ext4
> i_flags").
>
> Originally-from: Darrick J. Wong <darrick.wong@oracle.com>
> Signed-off-by: Eric Biggers <ebiggers@google.com>
Looks ok,
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
--D
> ---
> fs/f2fs/file.c | 9 +--------
> 1 file changed, 1 insertion(+), 8 deletions(-)
>
> diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
> index ae1a54ecc9fccc..e8b81f6f5c2b15 100644
> --- a/fs/f2fs/file.c
> +++ b/fs/f2fs/file.c
> @@ -1648,19 +1648,12 @@ static int f2fs_file_flush(struct file *file, fl_owner_t id)
> static int f2fs_setflags_common(struct inode *inode, u32 iflags, u32 mask)
> {
> struct f2fs_inode_info *fi = F2FS_I(inode);
> - u32 oldflags;
>
> /* Is it quota file? Do not allow user to mess with it */
> if (IS_NOQUOTA(inode))
> return -EPERM;
>
> - oldflags = fi->i_flags;
> -
> - if ((iflags ^ oldflags) & (F2FS_APPEND_FL | F2FS_IMMUTABLE_FL))
> - if (!capable(CAP_LINUX_IMMUTABLE))
> - return -EPERM;
> -
> - fi->i_flags = iflags | (oldflags & ~mask);
> + fi->i_flags = iflags | (fi->i_flags & ~mask);
>
> if (fi->i_flags & F2FS_PROJINHERIT_FL)
> set_inode_flag(inode, FI_PROJ_INHERIT);
> --
> 2.22.0.410.gd8fdbe21b5-goog
>
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2019-07-07 20:43 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-07-01 20:26 [f2fs-dev] [PATCH 0/3] f2fs: use generic helpers for FS_IOC_{SETFLAGS, FSSETXATTR} Eric Biggers
2019-07-01 20:26 ` [f2fs-dev] [PATCH 1/3] f2fs: use generic checking and prep function for FS_IOC_SETFLAGS Eric Biggers
2019-07-03 1:58 ` Chao Yu
2019-07-07 20:41 ` Darrick J. Wong
2019-07-01 20:26 ` [f2fs-dev] [PATCH 2/3] f2fs: use generic checking function for FS_IOC_FSSETXATTR Eric Biggers
2019-07-03 1:58 ` Chao Yu
2019-07-07 20:41 ` Darrick J. Wong
2019-07-01 20:26 ` [f2fs-dev] [PATCH 3/3] f2fs: remove redundant check from f2fs_setflags_common() Eric Biggers
2019-07-03 1:58 ` Chao Yu
2019-07-07 20:42 ` Darrick J. Wong
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).