ubifs: reject unsupported ioctl flags explicitly

Message ID 20190209085420.2375-1-houtao1@huawei.com
State New
Delegated to: Richard Weinberger
Headers show
Series
  • ubifs: reject unsupported ioctl flags explicitly
Related show

Commit Message

Hou Tao Feb. 9, 2019, 8:54 a.m.
Reject unsupported ioctl flags explicitly, so the following command
on a regular ubifs file will fail:
	chattr +d ubifs_file

And xfstests generic/424 will pass.

Signed-off-by: Hou Tao <houtao1@huawei.com>
---
 fs/ubifs/ioctl.c | 8 ++++++++
 1 file changed, 8 insertions(+)

Comments

Hou Tao Feb. 13, 2019, 6:50 a.m. | #1
ping ?

On 2019/2/9 16:54, Hou Tao wrote:
> Reject unsupported ioctl flags explicitly, so the following command
> on a regular ubifs file will fail:
> 	chattr +d ubifs_file
> 
> And xfstests generic/424 will pass.
> 
> Signed-off-by: Hou Tao <houtao1@huawei.com>
> ---
>  fs/ubifs/ioctl.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/fs/ubifs/ioctl.c b/fs/ubifs/ioctl.c
> index 0164bcc827f8..daf9f93e15de 100644
> --- a/fs/ubifs/ioctl.c
> +++ b/fs/ubifs/ioctl.c
> @@ -28,6 +28,11 @@
>  #include <linux/mount.h>
>  #include "ubifs.h"
>  
> +/* Need to be kept consistent with checked flags in ioctl2ubifs() */
> +#define UBIFS_SUPPORTED_IOCTL_FLAGS \
> +	(FS_COMPR_FL | FS_SYNC_FL | FS_APPEND_FL | \
> +	 FS_IMMUTABLE_FL | FS_DIRSYNC_FL)
> +
>  /**
>   * ubifs_set_inode_flags - set VFS inode flags.
>   * @inode: VFS inode to set flags for
> @@ -169,6 +174,9 @@ long ubifs_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
>  		if (get_user(flags, (int __user *) arg))
>  			return -EFAULT;
>  
> +		if (flags & ~UBIFS_SUPPORTED_IOCTL_FLAGS)
> +			return -EOPNOTSUPP;
> +
>  		if (!S_ISDIR(inode->i_mode))
>  			flags &= ~FS_DIRSYNC_FL;
>  
>
Richard Weinberger Feb. 13, 2019, 9:37 a.m. | #2
Am Mittwoch, 13. Februar 2019, 07:50:42 CET schrieb Hou Tao:
> ping ?

No need to panic. Just returned from vacation and still didn't reach
to bottom of my mail pile....
 
Thanks,
//richard
Richard Weinberger Feb. 14, 2019, 7:43 a.m. | #3
Am Samstag, 9. Februar 2019, 09:54:20 CET schrieb Hou Tao:
> Reject unsupported ioctl flags explicitly, so the following command
> on a regular ubifs file will fail:
> 	chattr +d ubifs_file
> 
> And xfstests generic/424 will pass.
> 
> Signed-off-by: Hou Tao <houtao1@huawei.com>
> ---
>  fs/ubifs/ioctl.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/fs/ubifs/ioctl.c b/fs/ubifs/ioctl.c
> index 0164bcc827f8..daf9f93e15de 100644
> --- a/fs/ubifs/ioctl.c
> +++ b/fs/ubifs/ioctl.c
> @@ -28,6 +28,11 @@
>  #include <linux/mount.h>
>  #include "ubifs.h"
>  
> +/* Need to be kept consistent with checked flags in ioctl2ubifs() */
> +#define UBIFS_SUPPORTED_IOCTL_FLAGS \
> +	(FS_COMPR_FL | FS_SYNC_FL | FS_APPEND_FL | \
> +	 FS_IMMUTABLE_FL | FS_DIRSYNC_FL)
> +
>  /**
>   * ubifs_set_inode_flags - set VFS inode flags.
>   * @inode: VFS inode to set flags for
> @@ -169,6 +174,9 @@ long ubifs_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
>  		if (get_user(flags, (int __user *) arg))
>  			return -EFAULT;
>  
> +		if (flags & ~UBIFS_SUPPORTED_IOCTL_FLAGS)
> +			return -EOPNOTSUPP;
> +
>  		if (!S_ISDIR(inode->i_mode))
>  			flags &= ~FS_DIRSYNC_FL;
>  
> 

Makes sense, will queue for the next merge window. :-)

Thanks,
//richard

Patch

diff --git a/fs/ubifs/ioctl.c b/fs/ubifs/ioctl.c
index 0164bcc827f8..daf9f93e15de 100644
--- a/fs/ubifs/ioctl.c
+++ b/fs/ubifs/ioctl.c
@@ -28,6 +28,11 @@ 
 #include <linux/mount.h>
 #include "ubifs.h"
 
+/* Need to be kept consistent with checked flags in ioctl2ubifs() */
+#define UBIFS_SUPPORTED_IOCTL_FLAGS \
+	(FS_COMPR_FL | FS_SYNC_FL | FS_APPEND_FL | \
+	 FS_IMMUTABLE_FL | FS_DIRSYNC_FL)
+
 /**
  * ubifs_set_inode_flags - set VFS inode flags.
  * @inode: VFS inode to set flags for
@@ -169,6 +174,9 @@  long ubifs_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 		if (get_user(flags, (int __user *) arg))
 			return -EFAULT;
 
+		if (flags & ~UBIFS_SUPPORTED_IOCTL_FLAGS)
+			return -EOPNOTSUPP;
+
 		if (!S_ISDIR(inode->i_mode))
 			flags &= ~FS_DIRSYNC_FL;