|
@@ -579,10 +579,12 @@ static inline void tcp_rcv_rtt_measure_ts(struct sock *sk,
|
|
|
u32 delta = tcp_time_stamp(tp) - tp->rx_opt.rcv_tsecr;
|
|
|
u32 delta_us;
|
|
|
|
|
|
- if (!delta)
|
|
|
- delta = 1;
|
|
|
- delta_us = delta * (USEC_PER_SEC / TCP_TS_HZ);
|
|
|
- tcp_rcv_rtt_update(tp, delta_us, 0);
|
|
|
+ if (likely(delta < INT_MAX / (USEC_PER_SEC / TCP_TS_HZ))) {
|
|
|
+ if (!delta)
|
|
|
+ delta = 1;
|
|
|
+ delta_us = delta * (USEC_PER_SEC / TCP_TS_HZ);
|
|
|
+ tcp_rcv_rtt_update(tp, delta_us, 0);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -2910,9 +2912,11 @@ static bool tcp_ack_update_rtt(struct sock *sk, const int flag,
|
|
|
if (seq_rtt_us < 0 && tp->rx_opt.saw_tstamp && tp->rx_opt.rcv_tsecr &&
|
|
|
flag & FLAG_ACKED) {
|
|
|
u32 delta = tcp_time_stamp(tp) - tp->rx_opt.rcv_tsecr;
|
|
|
- u32 delta_us = delta * (USEC_PER_SEC / TCP_TS_HZ);
|
|
|
|
|
|
- seq_rtt_us = ca_rtt_us = delta_us;
|
|
|
+ if (likely(delta < INT_MAX / (USEC_PER_SEC / TCP_TS_HZ))) {
|
|
|
+ seq_rtt_us = delta * (USEC_PER_SEC / TCP_TS_HZ);
|
|
|
+ ca_rtt_us = seq_rtt_us;
|
|
|
+ }
|
|
|
}
|
|
|
rs->rtt_us = ca_rtt_us; /* RTT of last (S)ACKed packet (or -1) */
|
|
|
if (seq_rtt_us < 0)
|