qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v2 3/3] linux-user: exclude SO_TIMESTAMP cmsg_ty


From: Peter Maydell
Subject: Re: [Qemu-devel] [PATCH v2 3/3] linux-user: exclude SO_TIMESTAMP cmsg_type from unsuppoted ancillary data
Date: Mon, 16 Jul 2012 15:45:56 +0100

On 16 July 2012 11:15, Jing Huang <address@hidden> wrote:
> This patch excludes SO_TIMESTAMP cmsg_type from unsuppoted ancillary data.

"unsupported".

>
> Signed-off-by: Jing Huang <address@hidden>
> ---
>  linux-user/syscall.c |    4 +++-
>  1 files changed, 3 insertions(+), 1 deletions(-)
>
> diff --git a/linux-user/syscall.c b/linux-user/syscall.c
> index fc8690d..9fce57c 100644
> --- a/linux-user/syscall.c
> +++ b/linux-user/syscall.c
> @@ -1349,7 +1349,9 @@ static inline abi_long host_to_target_cmsg(struct 
> target_msghdr *target_msgh,
>          target_cmsg->cmsg_type = tswap32(cmsg->cmsg_type);
>          target_cmsg->cmsg_len = tswapal(TARGET_CMSG_LEN(len));
>
> -        if (cmsg->cmsg_level != TARGET_SOL_SOCKET || cmsg->cmsg_type != 
> SCM_RIGHTS) {
> +        if (cmsg->cmsg_level != TARGET_SOL_SOCKET ||
> +                    (cmsg->cmsg_type != SCM_RIGHTS &&
> +                                    cmsg->cmsg_type != SO_TIMESTAMP)) {
>              gemu_log("Unsupported ancillary data: %d/%d\n", 
> cmsg->cmsg_level, cmsg->cmsg_type);
>              memcpy(target_data, data, len);
>          } else {

This is kind of ugly -- it causes us to process a SO_TIMESTAMP
payload (which is a 'struct timeval') in the same way as an
SCM_RIGHTS payload (which is an array of file descriptors).
This happens to work because a struct timeval is a pair of
32 bit integers, and so "tswap32() all the words in the data"
works, but it looks pretty weird. If you want to do it this
way you need at least an explanatory comment and really the
variables 'fd', 'target_fd', 'numfds' would need to change
to something more generic and less fd-specific.

-- PMM



reply via email to

[Prev in Thread] Current Thread [Next in Thread]