summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDarrick J. Wong <darrick.wong@oracle.com>2019-07-01 08:25:36 -0700
committerDarrick J. Wong <darrick.wong@oracle.com>2019-07-01 08:25:36 -0700
commitdbc77f31e58b2902a5e7643761c04bf69f57a32a (patch)
tree41ae6b0acb34ae1a82773e5faeaff81acb88a519
parentca29be753445450799958e7d2e5d797d1153389e (diff)
vfs: only allow FSSETXATTR to set DAX flag on files and dirs
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.c8
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);