Date: Mon, 13 Aug 2007 15:34:44 -0700 (PDT) From: Don Lewis <truckman@FreeBSD.org> To: yusheng.huang@bluecoat.com Cc: freebsd-net@FreeBSD.org Subject: Re: An ISN(initial sequence number) bug? Message-ID: <200708132234.l7DMYiSX067226@gw.catspoiler.org> In-Reply-To: <305C539CA2F86249BF51CDCE8996AFF406322606@bcs-mail2.internal.cacheflow.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On 13 Aug, Huang, Yusheng wrote:
> Hi,
>
>
>
> I think there is a bug in the tcp_isn_tick() function.
>
>
>
> 1477 static void
>
> 1478 tcp_isn_tick(xtp)
>
> 1479 void *xtp;
>
> 1480 {
>
> 1481 u_int32_t projected_offset;
>
> 1482
>
> 1483 INP_INFO_WLOCK(&tcbinfo);
>
> 1484 projected_offset = isn_offset_old + ISN_BYTES_PER_SECOND /
> 100;
>
> 1485
>
> 1486 if (projected_offset > isn_offset)
>
> 1487 isn_offset = projected_offset;
>
> 1488
>
> 1489 isn_offset_old = isn_offset;
>
> 1490 callout_reset(&isn_callout, hz/100, tcp_isn_tick, NULL);
>
> 1491 INP_INFO_WUNLOCK(&tcbinfo);
>
> 1492 }
>
>
>
> If isn_offset is close to the 4G boundary, the projected_offset is
> likely to overflow the 4G value so the unsigned comparison at line#1486
> will not be true and isn_offset will not be incremented by the
> tcp_isn_tick() for a very long long time.
I think the comparison should be done with the SEQ_GT() macro.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200708132234.l7DMYiSX067226>
