Message ID | 1377591715-1742-1-git-send-email-avagin@openvz.org |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
From: Andrey Vagin <avagin@openvz.org> Date: Tue, 27 Aug 2013 12:21:55 +0400 > From: Andrew Vagin <avagin@openvz.org> > > The zero value means that tsecr is not valid, so it's a special case. > > tsoffset is used to customize tcp_time_stamp for one socket. > tsoffset is usually zero, it's used when a socket was moved from one > host to another host. > > Currently this issue affects logic of tcp_rcv_rtt_measure_ts. Due to > incorrect value of rcv_tsecr, tcp_rcv_rtt_measure_ts sets rto to > TCP_RTO_MAX. > > Reported-by: Cyrill Gorcunov <gorcunov@openvz.org> > Signed-off-by: Andrey Vagin <avagin@openvz.org> Applied and queued up for -stable. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 28af45a..3ca2139 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -3535,7 +3535,10 @@ static bool tcp_parse_aligned_timestamp(struct tcp_sock *tp, const struct tcphdr ++ptr; tp->rx_opt.rcv_tsval = ntohl(*ptr); ++ptr; - tp->rx_opt.rcv_tsecr = ntohl(*ptr) - tp->tsoffset; + if (*ptr) + tp->rx_opt.rcv_tsecr = ntohl(*ptr) - tp->tsoffset; + else + tp->rx_opt.rcv_tsecr = 0; return true; } return false; @@ -3560,7 +3563,7 @@ static bool tcp_fast_parse_options(const struct sk_buff *skb, } tcp_parse_options(skb, &tp->rx_opt, 1, NULL); - if (tp->rx_opt.saw_tstamp) + if (tp->rx_opt.saw_tstamp && tp->rx_opt.rcv_tsecr) tp->rx_opt.rcv_tsecr -= tp->tsoffset; return true; @@ -5316,7 +5319,7 @@ static int tcp_rcv_synsent_state_process(struct sock *sk, struct sk_buff *skb, int saved_clamp = tp->rx_opt.mss_clamp; tcp_parse_options(skb, &tp->rx_opt, 0, &foc); - if (tp->rx_opt.saw_tstamp) + if (tp->rx_opt.saw_tstamp && tp->rx_opt.rcv_tsecr) tp->rx_opt.rcv_tsecr -= tp->tsoffset; if (th->ack) {