svn commit: r317208 - head/sys/netinet
Michael Tuexen
tuexen at freebsd.org
Fri Apr 21 06:10:34 UTC 2017
> On 21. Apr 2017, at 05:16, Bruce Evans <brde at optusnet.com.au> wrote:
>
> On Thu, 20 Apr 2017, Cy Schubert wrote:
>
> Please trim quotes.
>
>> In message <201704201919.v3KJJYko052651 at repo.freebsd.org>, Michael Tuexen
>> write
>> s:
>
> [>> ... 5 lines trimmed]
>
>>> Log:
>>> Syncoockies can be used in combination with the syncache. If the cache
>>> overflows, syncookies are used.
>
> [>> ... 16 lines trimmed]
>
>>> Modified: head/sys/netinet/tcp_syncache.c
>>> =============================================================================
>>> =
>>> --- head/sys/netinet/tcp_syncache.c Thu Apr 20 19:14:52 2017 (r31720
>>> 7)
>>> +++ head/sys/netinet/tcp_syncache.c Thu Apr 20 19:19:33 2017 (r31720
>>> 8)
>>> @@ -260,6 +260,7 @@ syncache_init(void)
>>> &V_tcp_syncache.hashbase[i].sch_mtx, 0);
>>> V_tcp_syncache.hashbase[i].sch_length = 0;
>>> V_tcp_syncache.hashbase[i].sch_sc = &V_tcp_syncache;
>>> + V_tcp_syncache.hashbase[i].sch_last_overflow = INT64_MIN;
>> ...
>> This line produced the following on i386:
>>
>> /opt/src/svn-current/sys/netinet/tcp_syncache.c:263:50: error: implicit
>> conversion from 'long long' to 'time_t' (aka 'int') changes value from
>> -9223372036854775808 to 0 [-Werror,-Wconstant-conversion]
>> V_tcp_syncache.hashbase[i].sch_last_overflow = INT64_MIN;
>> ~ ^~~~~~~~~
>> ./x86/_stdint.h:91:41: note: expanded from macro 'INT64_MIN'
>> #define INT64_MIN (-0x7fffffffffffffffLL-1)
>> ~~~~~~~~~~~~~~~~~~~~~^~
>>
>> Looks like it needs a time_t cast.
>
> A cast would just break the warning. INT64_MIN has nothing to do with
> time_t. The expression (time_t)INT64_MIN would be more obviously garbage
> since in the above it is not clear that sch_last_overflow has a type
> unrelated to the constant.
Fixed in https://svnweb.freebsd.org/changeset/base/317244
>
> INT64_MIN is also broken if time_t is 64 bits but unsigned. Then it is
> converted to half of plus infinity instead of the intended minus infinity.
The patch assumes that time_t is signed, which is true for FreeBSD on all
platforms. Or am I missing a platform?
Best regards
Michael
>
> Bruce
More information about the svn-src-all
mailing list