Le 28/12/2017 à 18:39, Laurent Vivier a écrit : > Le 28/12/2017 à 16:00, Samuel Thibault a écrit : >> Signed-off-by: Samuel Thibault <samuel.thiba...@ens-lyon.org> >> --- >> linux-user/syscall.c | 16 ++++++++++++++++ >> 1 file changed, 16 insertions(+) >> >> diff --git a/linux-user/syscall.c b/linux-user/syscall.c >> index 8ec7de96ce..bb8cb726f5 100644 >> --- a/linux-user/syscall.c >> +++ b/linux-user/syscall.c >> @@ -296,6 +296,8 @@ _syscall3(int, sys_sched_getaffinity, pid_t, pid, >> unsigned int, len, >> #define __NR_sys_sched_setaffinity __NR_sched_setaffinity >> _syscall3(int, sys_sched_setaffinity, pid_t, pid, unsigned int, len, >> unsigned long *, user_mask_ptr); >> +#define __NR_sys_getcpu __NR_getcpu >> +_syscall3(int, sys_getcpu, unsigned *, cpu, unsigned *, node, void *, >> tcache); >> _syscall4(int, reboot, int, magic1, int, magic2, unsigned int, cmd, >> void *, arg); >> _syscall2(int, capget, struct __user_cap_header_struct *, header, >> @@ -10443,6 +10445,20 @@ abi_long do_syscall(void *cpu_env, int num, >> abi_long arg1, >> ret = get_errno(sys_sched_setaffinity(arg1, mask_size, mask)); >> } >> break> + case TARGET_NR_getcpu: >> + { >> + unsigned cpu, node; >> + ret = get_errno(sys_getcpu(arg1 ? &cpu : NULL, >> + arg2 ? &node : NULL, >> + NULL)); >> + if (arg1) { >> + put_user(cpu, arg1, abi_uint); >> + } >> + if (arg2) { >> + put_user(node, arg2, abi_uint); >> + } > > You must check for EFAULT. > > if (arg1 && put_user_u32(cpu, arg1)) { > goto efault; > } > ... > > I don't think you need to use the abi_uint type as we are using > put_user_u32() for all the other syscalls for unsigned int.
Samuel, could you send an updated version of your patch? Thanks, Laurent