From: Mike Perry Date: Thu, 15 Dec 2022 22:03:26 +0000 (+0000) Subject: Safety fixes to RFC3742 X-Git-Tag: tor-0.4.7.13~8^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5ddd3a9069081c9a96d9beb1b0ef99f27636eef5;p=thirdparty%2Ftor.git Safety fixes to RFC3742 --- diff --git a/src/core/or/congestion_control_vegas.c b/src/core/or/congestion_control_vegas.c index ae945e7e00..71ffde3061 100644 --- a/src/core/or/congestion_control_vegas.c +++ b/src/core/or/congestion_control_vegas.c @@ -283,8 +283,11 @@ rfc3742_ss_inc(const congestion_control_t *cc) // => K = 2*cwnd/max_ssthresh // cwnd += int(MSS/K); // => cwnd += MSS*max_ssthresh/(2*cwnd) - return ((uint64_t)cc->sendme_inc*cc->vegas_params.ss_cwnd_cap + cc->cwnd)/ - (2*cc->cwnd); + // Return at least 1 for inc. + return MAX( + ((uint64_t)cc->sendme_inc*cc->vegas_params.ss_cwnd_cap + cc->cwnd)/ + (2*cc->cwnd), + 1); } } @@ -447,8 +450,10 @@ congestion_control_vegas_process_sendme(congestion_control_t *cc, cc->cwnd += inc; // Check if inc is less than what we would do in steady-state - // avoidance - if (inc*SENDME_PER_CWND(cc) <= CWND_INC(cc)) { + // avoidance. Note that this is likely never to happen + // in practice, but we keep this block and the metrics to make + // sure. + if (inc*SENDME_PER_CWND(cc) <= CWND_INC(cc)*cc->cwnd_inc_rate) { congestion_control_vegas_exit_slow_start(circ, cc); cc_stats_vegas_below_ss_inc_floor++;