diff options
Diffstat (limited to 'net/ipv4/tcp_timer.c')
| -rw-r--r-- | net/ipv4/tcp_timer.c | 6 | 
1 files changed, 5 insertions, 1 deletions
| diff --git a/net/ipv4/tcp_timer.c b/net/ipv4/tcp_timer.c index 83fe7f62f7f1..5bfd76a31af6 100644 --- a/net/ipv4/tcp_timer.c +++ b/net/ipv4/tcp_timer.c @@ -485,8 +485,12 @@ static bool tcp_rtx_probe0_timed_out(const struct sock *sk,  {  	const struct tcp_sock *tp = tcp_sk(sk);  	const int timeout = TCP_RTO_MAX * 2; -	u32 rcv_delta; +	s32 rcv_delta; +	/* Note: timer interrupt might have been delayed by at least one jiffy, +	 * and tp->rcv_tstamp might very well have been written recently. +	 * rcv_delta can thus be negative. +	 */  	rcv_delta = inet_csk(sk)->icsk_timeout - tp->rcv_tstamp;  	if (rcv_delta <= timeout)  		return false; |