xfs: lift common checks into xfs_ioc_attr_list
authorChristoph Hellwig <hch@lst.de>
Thu, 27 Feb 2020 01:30:40 +0000 (17:30 -0800)
committerDarrick J. Wong <darrick.wong@oracle.com>
Tue, 3 Mar 2020 04:55:54 +0000 (20:55 -0800)
Lift the flags and bufsize checks from both callers into the common code
in xfs_ioc_attr_list.

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 f1f7f1a..c88ed3e 100644 (file)
@@ -361,6 +361,18 @@ xfs_ioc_attr_list(
        struct xfs_attrlist             *alist;
        int                             error;
 
+       if (bufsize < sizeof(struct xfs_attrlist) ||
+           bufsize > XFS_XATTR_LIST_MAX)
+               return -EINVAL;
+
+       /*
+        * Reject flags, only allow namespaces.
+        */
+       if (flags & ~(ATTR_ROOT | ATTR_SECURE))
+               return -EINVAL;
+       if (flags == (ATTR_ROOT | ATTR_SECURE))
+               return -EINVAL;
+
        /*
         * Validate the cursor.
         */
@@ -415,17 +427,6 @@ xfs_attrlist_by_handle(
                return -EPERM;
        if (copy_from_user(&al_hreq, arg, sizeof(xfs_fsop_attrlist_handlereq_t)))
                return -EFAULT;
-       if (al_hreq.buflen < sizeof(struct xfs_attrlist) ||
-           al_hreq.buflen > XFS_XATTR_LIST_MAX)
-               return -EINVAL;
-
-       /*
-        * Reject flags, only allow namespaces.
-        */
-       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 10ea022..840d179 100644 (file)
@@ -366,17 +366,6 @@ xfs_compat_attrlist_by_handle(
        if (copy_from_user(&al_hreq, arg,
                           sizeof(compat_xfs_fsop_attrlist_handlereq_t)))
                return -EFAULT;
-       if (al_hreq.buflen < sizeof(struct xfs_attrlist) ||
-           al_hreq.buflen > XFS_XATTR_LIST_MAX)
-               return -EINVAL;
-
-       /*
-        * Reject flags, only allow namespaces.
-        */
-       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))