Search
SailfishOS Open Build Service
>
Projects
>
home:LiuQian
:
makes
>
qemu
> 0041-Fix-emulation-of-splice-syscall.patch
Log In
Username
Password
Cancel
Overview
Repositories
Revisions
Requests
Users
Advanced
Attributes
Meta
File 0041-Fix-emulation-of-splice-syscall.patch of Package qemu
From: Andreas Schwab <schwab@suse.de> Date: Mon, 16 Feb 2015 17:39:35 +0100 Subject: Fix emulation of splice syscall The second and fourth argument are in/out parameters, store them back after the syscall. Also, the fourth argument was mishandled, and EFAULT handling was missing. Change-Id: I625ecd4dc3e53b8025585727439f1112c38d1758 Patch-Url: https://www.mail-archive.com/qemu-devel@nongnu.org/msg277687.html Signed-off-by: Stephane Desneux <stephane.desneux@open.eurogiciel.org> --- linux-user/syscall.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/linux-user/syscall.c b/linux-user/syscall.c index a08f5ef..52885ab 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