vfs: Don't copy beyond the end of the file
Subsystems (3)
PATCH 1/1 vfs: Don't copy beyond the end of the file
According to man 2 copy_file_range, EINVAL should be returned if the "requested range extends beyond the end of the source file". Falling back on do_splice_direct() will return 0 in this case, so let's add an explicit check to match the behavior documented in the man page.
Signed-off-by Anna Schumaker <[email protected]>
--- fs/read_write.c | 3 +++ 1 file changed, 3 insertions(+)
fs/read_write.c +3 -0
@@ -1497,6 +1497,9 @@ ssize_t vfs_copy_file_range(struct file *file_in, loff_t pos_in,if (unlikely (ret))return ret; +if (pos_in >=i_size_read (inode_in)) +return -EINVAL ; +if (!(file_in->f_mode &FMODE_READ ) || !(file_out->f_mode &FMODE_WRITE ) || (file_out->f_flags &O_APPEND ))
Signature · 1 line
2.9.3