HomeFreeBSD

vfs_syscalls.c: Fix handling of offset args for copy_file_range

Description

vfs_syscalls.c: Fix handling of offset args for copy_file_range

Commit 197997a broke handling of the offset
arguments to copy_file_range() when specified non-NULL.
The code fails to update the offsets and, as such, a loop like:

do {

len = copy_file_range(infd, &inpos, outfd, &outpos,
   SSIZE_MAX, 0);

} while (len > 0);

becomes an infinite loop, just doing the same copy over and
over again.

This patch fixes it.

The clause "(foffsets_locked || foffsets_set)" in the if is not
actually needed for correctness, but I thought it made the code
a little more readable and might avoid some static
analyzer from throwing a "used before being set" for
the savinoff and savoutoff variables.

Approved by: so
Security: FreeBSD-EN-25:16.vfs

(cherry picked from commit 4046ad6bb0ee542a42d89a48a7d6a56564ed7f33)
(cherry picked from commit 2fd0083fcc23f4c25860b8890292448720a5961c)

Details

Provenance
rmacklemAuthored on Aug 9 2025, 9:15 PM
gordonCommitted on Sep 14 2025, 12:23 AM
Parents
rG99012995b4c6: arm64: prevent panic when using syscall mux + large arg call (mmap)
Branches
Unknown
Tags
Unknown