diff options
author | Darrick J. Wong <darrick.wong@oracle.com> | 2019-07-01 08:25:36 -0700 |
---|---|---|
committer | Darrick J. Wong <darrick.wong@oracle.com> | 2019-07-01 08:25:36 -0700 |
commit | dbc77f31e58b2902a5e7643761c04bf69f57a32a (patch) | |
tree | 41ae6b0acb34ae1a82773e5faeaff81acb88a519 | |
parent | ca29be753445450799958e7d2e5d797d1153389e (diff) |
vfs: only allow FSSETXATTR to set DAX flag on files and dirsvfs-fix-ioctl-checking-3
The DAX flag only applies to files and directories, so don't let it get
set for other types of files.
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Jan Kara <jack@suse.cz>
-rw-r--r-- | fs/inode.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/fs/inode.c b/fs/inode.c index 0cbce5a0a23c..446d05e25f39 100644 --- a/fs/inode.c +++ b/fs/inode.c @@ -2239,6 +2239,14 @@ int vfs_ioc_fssetxattr_check(struct inode *inode, const struct fsxattr *old_fa, !S_ISREG(inode->i_mode) && !S_ISDIR(inode->i_mode)) return -EINVAL; + /* + * It is only valid to set the DAX flag on regular files and + * directories on filesystems. + */ + if ((fa->fsx_xflags & FS_XFLAG_DAX) && + !(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode))) + return -EINVAL; + /* Extent size hints of zero turn off the flags. */ if (fa->fsx_extsize == 0) fa->fsx_xflags &= ~(FS_XFLAG_EXTSIZE | FS_XFLAG_EXTSZINHERIT); |