qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH] linux-user/syscall.c: Add SO_RCVTIMEO and SO_SN


From: Chen Gang
Subject: Re: [Qemu-devel] [PATCH] linux-user/syscall.c: Add SO_RCVTIMEO and SO_SNDTIMEO for getsockopt
Date: Fri, 8 Jan 2016 17:40:34 +0800
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.4.0

Firstly, thank you very much for your careful work.

On 2016年01月08日 16:25, Laurent Vivier wrote:
> 
> 
> Le 08/01/2016 02:59, address@hidden a écrit :
[...]
>> @@ -1692,10 +1693,30 @@ static abi_long do_getsockopt(int sockfd, int level, 
>> int optname,
>>          switch (optname) {
>>          /* These don't just return a single integer */
>>          case TARGET_SO_LINGER:
>> -        case TARGET_SO_RCVTIMEO:
>> -        case TARGET_SO_SNDTIMEO:
>>          case TARGET_SO_PEERNAME:
>>              goto unimplemented;
>> +
> 
> useless blank line
> 

OK.

>> +        case TARGET_SO_RCVTIMEO:
>> +            optname = SO_RCVTIMEO;
>> +            goto time_case;
>> +        case TARGET_SO_SNDTIMEO:
>> +            optname = SO_SNDTIMEO;
>> +        time_case:
> 
> Something like in "int_case", I think optlen is a pointer, not the length:
> 
>         if (get_user_u32(len, optlen))
>             return -TARGET_EFAULT;
>         if (len < 0)
>             return -TARGET_EINVAL;
> 

OK.

> 
>> +            if (optlen < sizeof(struct target_timeval)) {
>> +                return -TARGET_EINVAL;
>> +            }
> 
> You don't have to check the len (kernel doesn't), EINVAL is not listed
> in the getsockopt() error cases, it should be an EFAULT, and this will
> be managed by copy_to_user_timeval().
> 

OK.

>> +            lv = sizeof(tv);
>> +            ret = get_errno(getsockopt(sockfd, level, optname, &tv, &lv));
>> +            if (ret < 0) {
>> +                return ret;
>> +            }
> 
>  if (len > lv)
>     len = lv;
> 

OK.

>> +            if (copy_to_user_timeval(optval_addr, &tv)) {
>> +                return -TARGET_EFAULT;
>> +            }
>> +            if (put_user_u32(sizeof(struct target_timeval), optlen)) {
>> +                return -TARGET_EFAULT;
>> +            }
> 
>         if (put_user_u32(len, optlen))
>             return -TARGET_EFAULT;
> 

OK. I shall send patch v2 for it, in the next week.


Thanks.
-- 
Chen Gang (陈刚)

Open, share, and attitude like air, water, and life which God blessed



reply via email to

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