]> git.itanic.dy.fi Git - linux-stable/commitdiff
fs: fix reporting supported extra file attributes for statx()
authorTheodore Ts'o <tytso@mit.edu>
Sun, 18 Apr 2021 03:03:50 +0000 (23:03 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Sun, 18 Apr 2021 03:03:50 +0000 (23:03 -0400)
statx(2) notes that any attribute that is not indicated as supported
by stx_attributes_mask has no usable value.  Commits 801e523796004
("fs: move generic stat response attr handling to vfs_getattr_nosec")
and 712b2698e4c02 ("fs/stat: Define DAX statx attribute") sets
STATX_ATTR_AUTOMOUNT and STATX_ATTR_DAX, respectively, without setting
stx_attributes_mask, which can cause xfstests generic/532 to fail.

Fix this in the same way as commit 1b9598c8fb99 ("xfs: fix reporting
supported extra file attributes for statx()")

Fixes: 801e523796004 ("fs: move generic stat response attr handling to vfs_getattr_nosec")
Fixes: 712b2698e4c02 ("fs/stat: Define DAX statx attribute")
Cc: stable@kernel.org
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
fs/stat.c

index fbc171d038aa5ae0c0ecb26fc21becd74afbae4b..1fa38bdec1a68d48ebe622a7171a68e61a371860 100644 (file)
--- a/fs/stat.c
+++ b/fs/stat.c
@@ -86,12 +86,20 @@ int vfs_getattr_nosec(const struct path *path, struct kstat *stat,
        /* SB_NOATIME means filesystem supplies dummy atime value */
        if (inode->i_sb->s_flags & SB_NOATIME)
                stat->result_mask &= ~STATX_ATIME;
+
+       /*
+        * Note: If you add another clause to set an attribute flag, please
+        * update attributes_mask below.
+        */
        if (IS_AUTOMOUNT(inode))
                stat->attributes |= STATX_ATTR_AUTOMOUNT;
 
        if (IS_DAX(inode))
                stat->attributes |= STATX_ATTR_DAX;
 
+       stat->attributes_mask |= (STATX_ATTR_AUTOMOUNT |
+                                 STATX_ATTR_DAX);
+
        mnt_userns = mnt_user_ns(path->mnt);
        if (inode->i_op->getattr)
                return inode->i_op->getattr(mnt_userns, path, stat,