[03/10] xfs: bulkstat should copy lastip whenever userspace supplies one
diff mbox series

Message ID 155968498711.1657646.16552958514650953190.stgit@magnolia
State New
Headers show
Series
  • xfs: refactor and improve inode iteration
Related show

Commit Message

Darrick J. Wong June 4, 2019, 9:49 p.m. UTC
From: Darrick J. Wong <darrick.wong@oracle.com>

When userspace passes in a @lastip pointer we should copy the results
back, even if the @ocount pointer is NULL.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
---
 fs/xfs/xfs_ioctl.c   |   13 ++++++-------
 fs/xfs/xfs_ioctl32.c |   13 ++++++-------
 2 files changed, 12 insertions(+), 14 deletions(-)

Comments

Brian Foster June 10, 2019, 1:59 p.m. UTC | #1
On Tue, Jun 04, 2019 at 02:49:47PM -0700, Darrick J. Wong wrote:
> From: Darrick J. Wong <darrick.wong@oracle.com>
> 
> When userspace passes in a @lastip pointer we should copy the results
> back, even if the @ocount pointer is NULL.
> 
> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
> ---

Reviewed-by: Brian Foster <bfoster@redhat.com>

>  fs/xfs/xfs_ioctl.c   |   13 ++++++-------
>  fs/xfs/xfs_ioctl32.c |   13 ++++++-------
>  2 files changed, 12 insertions(+), 14 deletions(-)
> 
> 
> diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c
> index d7dfc13f30f5..5ffbdcff3dba 100644
> --- a/fs/xfs/xfs_ioctl.c
> +++ b/fs/xfs/xfs_ioctl.c
> @@ -768,14 +768,13 @@ xfs_ioc_bulkstat(
>  	if (error)
>  		return error;
>  
> -	if (bulkreq.ocount != NULL) {
> -		if (copy_to_user(bulkreq.lastip, &inlast,
> -						sizeof(xfs_ino_t)))
> -			return -EFAULT;
> +	if (bulkreq.lastip != NULL &&
> +	    copy_to_user(bulkreq.lastip, &inlast, sizeof(xfs_ino_t)))
> +		return -EFAULT;
>  
> -		if (copy_to_user(bulkreq.ocount, &count, sizeof(count)))
> -			return -EFAULT;
> -	}
> +	if (bulkreq.ocount != NULL &&
> +	    copy_to_user(bulkreq.ocount, &count, sizeof(count)))
> +		return -EFAULT;
>  
>  	return 0;
>  }
> diff --git a/fs/xfs/xfs_ioctl32.c b/fs/xfs/xfs_ioctl32.c
> index 614fc6886d24..814ffe6fbab7 100644
> --- a/fs/xfs/xfs_ioctl32.c
> +++ b/fs/xfs/xfs_ioctl32.c
> @@ -310,14 +310,13 @@ xfs_compat_ioc_bulkstat(
>  	if (error)
>  		return error;
>  
> -	if (bulkreq.ocount != NULL) {
> -		if (copy_to_user(bulkreq.lastip, &inlast,
> -						sizeof(xfs_ino_t)))
> -			return -EFAULT;
> +	if (bulkreq.lastip != NULL &&
> +	    copy_to_user(bulkreq.lastip, &inlast, sizeof(xfs_ino_t)))
> +		return -EFAULT;
>  
> -		if (copy_to_user(bulkreq.ocount, &count, sizeof(count)))
> -			return -EFAULT;
> -	}
> +	if (bulkreq.ocount != NULL &&
> +	    copy_to_user(bulkreq.ocount, &count, sizeof(count)))
> +		return -EFAULT;
>  
>  	return 0;
>  }
>

Patch
diff mbox series

diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c
index d7dfc13f30f5..5ffbdcff3dba 100644
--- a/fs/xfs/xfs_ioctl.c
+++ b/fs/xfs/xfs_ioctl.c
@@ -768,14 +768,13 @@  xfs_ioc_bulkstat(
 	if (error)
 		return error;
 
-	if (bulkreq.ocount != NULL) {
-		if (copy_to_user(bulkreq.lastip, &inlast,
-						sizeof(xfs_ino_t)))
-			return -EFAULT;
+	if (bulkreq.lastip != NULL &&
+	    copy_to_user(bulkreq.lastip, &inlast, sizeof(xfs_ino_t)))
+		return -EFAULT;
 
-		if (copy_to_user(bulkreq.ocount, &count, sizeof(count)))
-			return -EFAULT;
-	}
+	if (bulkreq.ocount != NULL &&
+	    copy_to_user(bulkreq.ocount, &count, sizeof(count)))
+		return -EFAULT;
 
 	return 0;
 }
diff --git a/fs/xfs/xfs_ioctl32.c b/fs/xfs/xfs_ioctl32.c
index 614fc6886d24..814ffe6fbab7 100644
--- a/fs/xfs/xfs_ioctl32.c
+++ b/fs/xfs/xfs_ioctl32.c
@@ -310,14 +310,13 @@  xfs_compat_ioc_bulkstat(
 	if (error)
 		return error;
 
-	if (bulkreq.ocount != NULL) {
-		if (copy_to_user(bulkreq.lastip, &inlast,
-						sizeof(xfs_ino_t)))
-			return -EFAULT;
+	if (bulkreq.lastip != NULL &&
+	    copy_to_user(bulkreq.lastip, &inlast, sizeof(xfs_ino_t)))
+		return -EFAULT;
 
-		if (copy_to_user(bulkreq.ocount, &count, sizeof(count)))
-			return -EFAULT;
-	}
+	if (bulkreq.ocount != NULL &&
+	    copy_to_user(bulkreq.ocount, &count, sizeof(count)))
+		return -EFAULT;
 
 	return 0;
 }