mirror of
https://github.com/adulau/aha.git
synced 2025-01-03 22:53:18 +00:00
[TCP]: Catch skb with S+L bugs earlier
SACKED_ACKED and LOST are mutually exclusive with SACK, thus having their sum larger than packets_out is bug with SACK. Eventually these bugs trigger traps in the tcp_clean_rtx_queue with SACK but it's much more informative to do this here. Non-SACK TCP, however, could get more than packets_out duplicate ACKs which each increment sacked_out, so it makes sense to do this kind of limitting for non-SACK TCP but not for SACK enabled one. Perhaps the author had the opposite in mind but did the logic accidently wrong way around? Anyway, the sacked_out incrementer code for non-SACK already deals this issue before calling sync_left_out so this trapping can be done unconditionally. Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@helsinki.fi> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
6aaf47fa48
commit
34588b4c04
1 changed files with 1 additions and 3 deletions
|
@ -736,9 +736,7 @@ static inline __u32 tcp_current_ssthresh(const struct sock *sk)
|
||||||
|
|
||||||
static inline void tcp_sync_left_out(struct tcp_sock *tp)
|
static inline void tcp_sync_left_out(struct tcp_sock *tp)
|
||||||
{
|
{
|
||||||
if (tp->rx_opt.sack_ok &&
|
BUG_ON(tp->sacked_out + tp->lost_out > tp->packets_out);
|
||||||
(tp->sacked_out >= tp->packets_out - tp->lost_out))
|
|
||||||
tp->sacked_out = tp->packets_out - tp->lost_out;
|
|
||||||
tp->left_out = tp->sacked_out + tp->lost_out;
|
tp->left_out = tp->sacked_out + tp->lost_out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue