[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] linux-user: Translate flags argument to dup3 sy
From: |
Laurent Vivier |
Subject: |
Re: [Qemu-devel] [PATCH] linux-user: Translate flags argument to dup3 syscall |
Date: |
Fri, 19 Jan 2018 17:33:57 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.2 |
Le 15/12/2017 à 16:18, Peter Maydell a écrit :
> The third argument to dup3() is a flags word which may be
> O_CLOEXEC. We weren't translating this flag from target to
> host value, which meant that if the target used a different
> value from the host (eg sparc guest and x86 host) the dup3()
> call would fail EINVAL. Do the correct translation.
>
> Fixes: https://bugs.launchpad.net/qemu/+bug/1704658
> Reported-by: Bruno Haible <address@hidden>
> Signed-off-by: Peter Maydell <address@hidden>
> ---
> linux-user/syscall.c | 10 +++++++++-
> 1 file changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/linux-user/syscall.c b/linux-user/syscall.c
> index 39553c8..41ded90 100644
> --- a/linux-user/syscall.c
> +++ b/linux-user/syscall.c
> @@ -8490,11 +8490,19 @@ abi_long do_syscall(void *cpu_env, int num, abi_long
> arg1,
> #endif
> #if defined(CONFIG_DUP3) && defined(TARGET_NR_dup3)
> case TARGET_NR_dup3:
> - ret = get_errno(dup3(arg1, arg2, arg3));
> + {
> + int host_flags;
> +
> + if ((arg3 & ~TARGET_O_CLOEXEC) != 0) {
> + return -EINVAL;
> + }
> + host_flags = target_to_host_bitmask(arg3, fcntl_flags_tbl);
> + ret = get_errno(dup3(arg1, arg2, host_flags));
> if (ret >= 0) {
> fd_trans_dup(arg1, arg2);
> }
> break;
> + }
> #endif
> #ifdef TARGET_NR_getppid /* not on alpha */
> case TARGET_NR_getppid:
>
Applied to my linux-user branch.
Thanks,
Laurent
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [Qemu-devel] [PATCH] linux-user: Translate flags argument to dup3 syscall,
Laurent Vivier <=