xfs: lift common checks into xfs_ioc_attr_list
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>
This commit is contained in:
parent
17e1dd83ea
commit
f604631951
|
@ -361,6 +361,18 @@ xfs_ioc_attr_list(
|
||||||
struct xfs_attrlist *alist;
|
struct xfs_attrlist *alist;
|
||||||
int error;
|
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.
|
* Validate the cursor.
|
||||||
*/
|
*/
|
||||||
|
@ -415,17 +427,6 @@ xfs_attrlist_by_handle(
|
||||||
return -EPERM;
|
return -EPERM;
|
||||||
if (copy_from_user(&al_hreq, arg, sizeof(xfs_fsop_attrlist_handlereq_t)))
|
if (copy_from_user(&al_hreq, arg, sizeof(xfs_fsop_attrlist_handlereq_t)))
|
||||||
return -EFAULT;
|
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);
|
dentry = xfs_handlereq_to_dentry(parfilp, &al_hreq.hreq);
|
||||||
if (IS_ERR(dentry))
|
if (IS_ERR(dentry))
|
||||||
|
|
|
@ -366,17 +366,6 @@ xfs_compat_attrlist_by_handle(
|
||||||
if (copy_from_user(&al_hreq, arg,
|
if (copy_from_user(&al_hreq, arg,
|
||||||
sizeof(compat_xfs_fsop_attrlist_handlereq_t)))
|
sizeof(compat_xfs_fsop_attrlist_handlereq_t)))
|
||||||
return -EFAULT;
|
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);
|
dentry = xfs_compat_handlereq_to_dentry(parfilp, &al_hreq.hreq);
|
||||||
if (IS_ERR(dentry))
|
if (IS_ERR(dentry))
|
||||||
|
|
Loading…
Reference in New Issue