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

Reply via email to