aboutsummaryrefslogtreecommitdiff
path: root/linux-user
diff options
context:
space:
mode:
authorGiuseppe Musacchio <thatlemon@gmail.com>2021-05-03 19:41:59 +0200
committerLaurent Vivier <laurent@vivier.eu>2021-05-18 07:09:58 +0200
commit0fa259dd7986d152294f31a6483272a4cb627b6d (patch)
tree216a407cf9e3455b1228bbda561d4f4e63720054 /linux-user
parentdb3221454d6b242c248cc4c33c60b9016e153516 (diff)
linux-user: Fix erroneous conversion in copy_file_range
The implicit cast from abi_long to size_t may introduce an intermediate unwanted sign-extension of the value for 32bit targets running on 64bit hosts. Signed-off-by: Giuseppe Musacchio <thatlemon@gmail.com> Reviewed-by: Laurent Vivier <laurent@vivier.eu> Message-Id: <20210503174159.54302-3-thatlemon@gmail.com> Signed-off-by: Laurent Vivier <laurent@vivier.eu>
Diffstat (limited to 'linux-user')
-rw-r--r--linux-user/syscall.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 4d52b2cfe3..e05870c338 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -13244,8 +13244,9 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1,
}
poutoff = &outoff;
}
+ /* Do not sign-extend the count parameter. */
ret = get_errno(safe_copy_file_range(arg1, pinoff, arg3, poutoff,
- arg5, arg6));
+ (abi_ulong)arg5, arg6));
if (!is_error(ret) && ret > 0) {
if (arg2) {
if (put_user_u64(inoff, arg2)) {