qemu-devel
[Top][All Lists]
Advanced

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

Re: [PATCH] tests/socket-helpers: Only fail socket protocol check if it


From: Thomas Huth
Subject: Re: [PATCH] tests/socket-helpers: Only fail socket protocol check if it is really necessary
Date: Tue, 8 Sep 2020 13:27:46 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.6.0

On 08/09/2020 13.07, Daniel P. Berrangé wrote:
> On Tue, Sep 08, 2020 at 12:54:35PM +0200, Thomas Huth wrote:
>> The tests/test-char test is currently always failing on my system since
>> socket_can_bind_connect("::1", PF_INET6) fails with EINVAL and thus
>> socket_check_protocol_support() is returning -1 for an error. But IPv4
>> is working fine. The logic in socket_check_protocol_support() seems to
>> be wrong here, if either IPv6 or IPv4 is working, we should not return
>> an error here. Thus rework the function to only return errors if both
>> checks failed.
> 
> Can you tell me which exact syscall is giving EINVAL in this scenario ?

getaddrinfo() fails with -2 (EAI_NONAME ?). The logic in
socket_can_bind_connect() then translates this into EINVAL.

[...]
>> -    if (socket_can_bind_connect("::1", PF_INET6) < 0) {
>> -        if (errno != EADDRNOTAVAIL) {
>> -            return -1;
>> -        }
>> -    } else {
>> -        *has_ipv6 = true;
>> +    errv6 = socket_can_bind_connect("::1", PF_INET6);
>> +    *has_ipv6 = (errv6 == 0);
>> +
>> +    if (!*has_ipv4 && !*has_ipv6 &&
>> +        (errv4 != EADDRNOTAVAIL || errv6 != EADDRNOTAVAIL)) {
>> +        return -1;
>>      }
> 
> The return value of socket_can_bind_connect is either 0 or -1,
> but you're treating it an errno which isn't right.

Uh, where's my brown paperbag? ... looks like I need more coffee today...

 Thomas




reply via email to

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