diff options
author | Rick Macklem <rmacklem@FreeBSD.org> | 2021-03-01 14:28:30 +0000 |
---|---|---|
committer | Rick Macklem <rmacklem@FreeBSD.org> | 2021-03-01 14:31:10 +0000 |
commit | a5f9fe2bab789f49e8b53da3a62dbd34725e23ea (patch) | |
tree | 2c314170591fb76aed8ee32eb6c54d1bd0834565 | |
parent | 0e4ff0acbe80c547988bede738af2e227c7eb47c (diff) | |
download | src-a5f9fe2bab789f49e8b53da3a62dbd34725e23ea.tar.gz src-a5f9fe2bab789f49e8b53da3a62dbd34725e23ea.zip |
copy_file_range(2): Fix for small values of input file offset and len
r366302 broke copy_file_range(2) for small values of
input file offset and len.
It was possible for rem to be greater than len and then
"len - rem" was a large value, since both variables are
unsigned.
Reported by: koobs, Pablo <pablogsal gmail com> (Python)
Reviewed by: asomers, koobs
MFC after: 3 days
Differential Revision: https://reviews.freebsd.org/D28981
-rw-r--r-- | sys/kern/vfs_vnops.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c index 781968f2db53..7a0951fb07ca 100644 --- a/sys/kern/vfs_vnops.c +++ b/sys/kern/vfs_vnops.c @@ -3143,7 +3143,7 @@ vn_generic_copy_file_range(struct vnode *invp, off_t *inoffp, rem = *inoffp % blksize; if (rem > 0) rem = blksize - rem; - if (len - rem > blksize) + if (len > rem && len - rem > blksize) len = savlen = rounddown(len - rem, blksize) + rem; } |