On Fri, Jun 02, 2023 at 11:05:24PM -0700, Paul Eggert wrote: > On 2023-06-02 09:31, Pádraig Brady wrote: > > I'm not sure it was working correctly before 9.3 either. > > Before 9.3 we would have switched from copy_file_range() to read()/write() > > Actually, cp shouldn't have been using copy_file_range at all, as the > code is supposed to never use copy_file_range unless the Linux kernel > version is 5.3 or later. See m4/copy-file-range.m4 and > lib/copy-file-range.c. > > Since the bug is being reported against kernel 4.19, someone needs to > investigate why the Gentoo build is using the copy_file_range syscall on > that kernel. Either the Gentoo build isn't properly compiling the > replacement function in coreutils/lib/copy-file-range.c, or the > replacement function is incorrectly deciding that the kernel is new > enough, or something like that. > > We shouldn't need to fiddle with src/copy.c on this.
The macro in copy-file-range.m4 performs a build time version check against the installed linux headers (/usr/include/linux). In this case, headers from linux-6.1 are being used at build time. However, the code is being run on a linux-4.19 kernel. Generally speaking, syscall checks must be done at run time on Linux, not build time.