vfs: reorder checks in vfs_copy_file_range() Other read/write ops do the rw_verify_area() after having checked the file descriptor for being the right type. Do the same here. Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
diff --git a/fs/read_write.c b/fs/read_write.c index 538af11..f87cdb2 100644 --- a/fs/read_write.c +++ b/fs/read_write.c
@@ -1521,14 +1521,6 @@ ssize_t vfs_copy_file_range(struct file *file_in, loff_t pos_in, if (flags != 0) return -EINVAL; - ret = rw_verify_area(READ, file_in, &pos_in, len); - if (unlikely(ret)) - return ret; - - ret = rw_verify_area(WRITE, file_out, &pos_out, len); - if (unlikely(ret)) - return ret; - if (!(file_in->f_mode & FMODE_PREAD) || !(file_out->f_mode & FMODE_PWRITE)) return -ESPIPE; @@ -1538,6 +1530,14 @@ ssize_t vfs_copy_file_range(struct file *file_in, loff_t pos_in, (file_out->f_flags & O_APPEND)) return -EBADF; + ret = rw_verify_area(READ, file_in, &pos_in, len); + if (unlikely(ret)) + return ret; + + ret = rw_verify_area(WRITE, file_out, &pos_out, len); + if (unlikely(ret)) + return ret; + /* this could be relaxed once a method supports cross-fs copies */ if (inode_in->i_sb != inode_out->i_sb) return -EXDEV;