OSDN Git Service

xfs: reject invalid flags combinations in XFS_IOC_ATTRLIST_BY_HANDLE
authorChristoph Hellwig <hch@lst.de>
Thu, 27 Feb 2020 01:30:28 +0000 (17:30 -0800)
committerDarrick J. Wong <darrick.wong@oracle.com>
Tue, 3 Mar 2020 04:55:51 +0000 (20:55 -0800)
While the flags field in the ABI and the on-disk format allows for
multiple namespace flags, an attribute can only exist in a single
namespace at a time. Hence asking to list attributes that exist
in multiple namespaces simultaneously is a logically invalid
request and will return no results. Reject this case early with
-EINVAL.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Chandan Rajendra <chandanrlinux@gmail.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
fs/xfs/xfs_ioctl.c
fs/xfs/xfs_ioctl32.c

index 0f85bed..3e457e9 100644 (file)
@@ -317,6 +317,8 @@ xfs_attrlist_by_handle(
         */
        if (al_hreq.flags & ~(ATTR_ROOT | ATTR_SECURE))
                return -EINVAL;
+       if (al_hreq.flags == (ATTR_ROOT | ATTR_SECURE))
+               return -EINVAL;
 
        dentry = xfs_handlereq_to_dentry(parfilp, &al_hreq.hreq);
        if (IS_ERR(dentry))
index 769581a..9705172 100644 (file)
@@ -375,6 +375,8 @@ xfs_compat_attrlist_by_handle(
         */
        if (al_hreq.flags & ~(ATTR_ROOT | ATTR_SECURE))
                return -EINVAL;
+       if (al_hreq.flags == (ATTR_ROOT | ATTR_SECURE))
+               return -EINVAL;
 
        dentry = xfs_compat_handlereq_to_dentry(parfilp, &al_hreq.hreq);
        if (IS_ERR(dentry))