svn commit: r317208 - head/sys/netinet

Bruce Evans brde at optusnet.com.au
Fri Apr 21 03:16:50 UTC 2017


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.

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.

Bruce


More information about the svn-src-head mailing list