diff mbox series

[v2] Btrfs: do not overwrite scrub error with fault error in scrub ioctl

Message ID 20181214195017.17822-1-fdmanana@kernel.org (mailing list archive)
State New, archived
Headers show
Series [v2] Btrfs: do not overwrite scrub error with fault error in scrub ioctl | expand

Commit Message

Filipe Manana Dec. 14, 2018, 7:50 p.m. UTC
From: Filipe Manana <fdmanana@suse.com>

If scrub returned an error and then the copy_to_user() call did not
succeed, we would overwrite the error returned by scrub with -EFAULT.
Fix that by removing the call to copy_to_user() as there is no need
to do it at all.

Signed-off-by: Filipe Manana <fdmanana@suse.com>
---

V2: Leave to copy_to_user() call since progress needs to be reported back
    to user space.

 fs/btrfs/ioctl.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

David Sterba Jan. 2, 2019, 5:56 p.m. UTC | #1
On Fri, Dec 14, 2018 at 07:50:17PM +0000, fdmanana@kernel.org wrote:
> From: Filipe Manana <fdmanana@suse.com>
> 
> If scrub returned an error and then the copy_to_user() call did not
> succeed, we would overwrite the error returned by scrub with -EFAULT.
> Fix that by removing the call to copy_to_user() as there is no need
> to do it at all.
> 
> Signed-off-by: Filipe Manana <fdmanana@suse.com>
> ---
> 
> V2: Leave to copy_to_user() call since progress needs to be reported back
>     to user space.

The changelog does not reflect v2, I'll update the last sentence to

"Fix that by calling copy_to_user() only if btrfs_scrub_dev returned
success."

Thanks.

Reviewed-by: David Sterba <dsterba@suse.com>
diff mbox series

Patch

diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
index 3a27efa2b955..4c05d9c4fe3d 100644
--- a/fs/btrfs/ioctl.c
+++ b/fs/btrfs/ioctl.c
@@ -4301,7 +4301,7 @@  static long btrfs_ioctl_scrub(struct file *file, void __user *arg)
 			      &sa->progress, sa->flags & BTRFS_SCRUB_READONLY,
 			      0);
 
-	if (copy_to_user(arg, sa, sizeof(*sa)))
+	if (ret == 0 && copy_to_user(arg, sa, sizeof(*sa)))
 		ret = -EFAULT;
 
 	if (!(sa->flags & BTRFS_SCRUB_READONLY))