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: Thu, 19 Jul 2012 15:34:37 +0100

On 19 July 2012 15:33, Jing Huang <address@hidden> wrote:
> On Mon, Jul 16, 2012 at 2:45 PM, Peter Maydell <address@hidden> wrote:
>> 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
>
>
> Hmm.. I give up this patch. It is ugly indeed. Additionally, qemu_log
> doesn't disturb the normal execution of linux-user and show error
> message either.

I think it's salvageable. As I say, you can either genericise
the "copy a pile of 32 bit values" code, or just have another
clause to the if() specifically for handling struct timeval
payload data.

-- PMM



reply via email to

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