Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 28 Dec 2015 00:25:17 -0800
From:      Sam Kumar <samkumar99@gmail.com>
To:        freebsd-current@freebsd.org
Subject:   TCP Stack: Challenge ACKs and Timestamps
Message-ID:  <CAGtMfeD4B0X%2BUd2-UJ2rQTM_P52ONKqh4Ppct2prJf3=Tm3kXw@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
Hello,
I am working with the code for the TCP Stack. I noticed that support for
Challenge Acks have been added since the latest release (10.2.0), and I
think I may have found a bug in how they relate to TCP timestamps. All line
numbers below are those in commit e66e064c45687b5d294565dbd829b419848f7992.

Looking at tcp_input.c, at lines 1594 to 1604, I see code that expects a
timestamp to be in every segment during the session, if they were
negotiated when the connection was being established.
(
https://github.com/freebsd/freebsd/blob/master/sys/netinet/tcp_input.c#L1595
)

Looking at tcp_input.c, at lines 2161 and 2188, I see that Challenge ACKs
are sent via calls to tcp_respond().
(
https://github.com/freebsd/freebsd/blob/master/sys/netinet/tcp_input.c#L2161
and
https://github.com/freebsd/freebsd/blob/master/sys/netinet/tcp_input.c#L2188
)

Looking at tcp_subr.c, at line 978, I see that the segment sent by
tcp_respond() never contains TCP options.
(https://github.com/freebsd/freebsd/blob/master/sys/netinet/tcp_subr.c#L978)

Therefore, it seems to me that Challenge ACKs will never contain any TCP
options. This violates the condition that once timestamps are negotiated,
they must be present in every segment.

Please let me know if I am mistaken, or if this is actually a bug.

Sam Kumar



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAGtMfeD4B0X%2BUd2-UJ2rQTM_P52ONKqh4Ppct2prJf3=Tm3kXw>