On 23 January 2018 at 14:48, Laurent Vivier <laur...@vivier.eu> wrote: > From: Samuel Thibault <samuel.thiba...@ens-lyon.org> > > sched_get/setaffinity linux-user syscalls were missing conversions for > little/big endian, which is hairy since longs may not be the same size > either. > > For simplicity, this just introduces loops to convert bit by bit like is > done for select. > > Signed-off-by: Samuel Thibault <samuel.thiba...@ens-lyon.org> > Reviewed-by: Laurent Vivier <laur...@vivier.eu> > Message-Id: <20180109201643.1479-1-samuel.thiba...@ens-lyon.org> > Signed-off-by: Laurent Vivier <laur...@vivier.eu> > ---
> @@ -10395,9 +10463,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long > arg1, > ret = arg2; > } > > - if (copy_to_user(arg3, mask, ret)) { > - goto efault; > - } > + ret = host_to_target_cpu_mask(mask, mask_size, arg3, arg2); > } > } > break; Hi -- Coverity spots that in this change, we now have a case where we set "ret = arg2;" which then immediately is replaced by "ret = host_to_target_cpu_mask(mask, mask_size, arg3, arg2);", making the first assignment pointless. It looks like we're now ignoring the host filled buffer size that is returned by sys_sched_getaffinity() and then adjusted by this bit of code. Shouldn't we be using that value in this new host_to_target_cpu_mask() code? thanks -- PMM