summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--linux-user/syscall.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index a08f5efb0..52885ab05 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -9489,14 +9489,24 @@ abi_long do_syscall(void *cpu_env, int num, abi_ulong arg1,
loff_t loff_in, loff_out;
loff_t *ploff_in = NULL, *ploff_out = NULL;
if(arg2) {
- get_user_u64(loff_in, arg2);
+ if (get_user_u64(loff_in, arg2))
+ goto efault;
ploff_in = &loff_in;
}
- if(arg4) {
- get_user_u64(loff_out, arg2);
+ if (arg4) {
+ if (get_user_u64(loff_out, arg4))
+ goto efault;
ploff_out = &loff_out;
}
ret = get_errno(splice(arg1, ploff_in, arg3, ploff_out, arg5, arg6));
+ if (arg2) {
+ if (put_user_u64(loff_in, arg2))
+ goto efault;
+ }
+ if (arg4) {
+ if (put_user_u64(loff_out, arg4))
+ goto efault;
+ }
}
break;
#endif