ubifs: Reject unsupported ioctl flags explicitly
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> Signed-off-by: Richard Weinberger <richard@nod.at>
This commit is contained in:
parent
663586c0a8
commit
2fe8b2d557
@ -28,6 +28,11 @@
|
|||||||
#include <linux/mount.h>
|
#include <linux/mount.h>
|
||||||
#include "ubifs.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.
|
* ubifs_set_inode_flags - set VFS inode flags.
|
||||||
* @inode: VFS inode to set flags for
|
* @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))
|
if (get_user(flags, (int __user *) arg))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
|
|
||||||
|
if (flags & ~UBIFS_SUPPORTED_IOCTL_FLAGS)
|
||||||
|
return -EOPNOTSUPP;
|
||||||
|
|
||||||
if (!S_ISDIR(inode->i_mode))
|
if (!S_ISDIR(inode->i_mode))
|
||||||
flags &= ~FS_DIRSYNC_FL;
|
flags &= ~FS_DIRSYNC_FL;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user