diff options
Diffstat (limited to 'net/ipv4/tcp_input.c')
| -rw-r--r-- | net/ipv4/tcp_input.c | 6 | 
1 files changed, 4 insertions, 2 deletions
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index bc2ea12221f9..23cf418efe4f 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -2192,7 +2192,8 @@ void tcp_enter_loss(struct sock *sk)   */  static bool tcp_check_sack_reneging(struct sock *sk, int flag)  { -	if (flag & FLAG_SACK_RENEGING) { +	if (flag & FLAG_SACK_RENEGING && +	    flag & FLAG_SND_UNA_ADVANCED) {  		struct tcp_sock *tp = tcp_sk(sk);  		unsigned long delay = max(usecs_to_jiffies(tp->srtt_us >> 4),  					  msecs_to_jiffies(10)); @@ -3645,7 +3646,8 @@ static void tcp_send_challenge_ack(struct sock *sk)  		u32 half = (ack_limit + 1) >> 1;  		WRITE_ONCE(net->ipv4.tcp_challenge_timestamp, now); -		WRITE_ONCE(net->ipv4.tcp_challenge_count, half + prandom_u32_max(ack_limit)); +		WRITE_ONCE(net->ipv4.tcp_challenge_count, +			   get_random_u32_inclusive(half, ack_limit + half - 1));  	}  	count = READ_ONCE(net->ipv4.tcp_challenge_count);  	if (count > 0) {  |