mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-24 20:33:31 +01:00
Prevent hugely inflated observed bandwidth values
When reading the bw history from the state file, we'd add the 900-second value as traffic that occured during one second. Fix that by adding the average value to each second. This bug was present since 0.2.0.5-alpha, but was hidden until 0.2.23-alpha when we started using the saved values.
This commit is contained in:
parent
13c3884ff6
commit
3f7f96d9e7
5
changes/bug2704_part2
Normal file
5
changes/bug2704_part2
Normal file
@ -0,0 +1,5 @@
|
||||
o Major bugfixes:
|
||||
- Prevent relays that read their bandwidth history from their state file
|
||||
from arbitrarily inflating that value. Fixes the second half of bug
|
||||
2704, bugfix on tor-0.2.2.23-alpha.
|
||||
|
@ -1686,11 +1686,24 @@ rep_hist_load_bwhist_state_section(bw_array_t *b,
|
||||
}
|
||||
|
||||
if (start < now) {
|
||||
add_obs(b, start, v);
|
||||
time_t cur_start = start;
|
||||
time_t actual_interval_len = s_interval;
|
||||
uint64_t cur_val = 0;
|
||||
/* Calculate the average per second. This is the best we can do
|
||||
* because our state file doesn't have per-second resolution. */
|
||||
if (start + s_interval > now)
|
||||
actual_interval_len = now - start;
|
||||
cur_val = v / actual_interval_len;
|
||||
/* This is potentially inefficient, but since we don't do it very
|
||||
* often it should be ok. */
|
||||
while (cur_start < start + actual_interval_len) {
|
||||
add_obs(b, cur_start, cur_val);
|
||||
++cur_start;
|
||||
}
|
||||
b->max_total = mv;
|
||||
/* This will result in some fairly choppy history if s_interval
|
||||
* is notthe same as NUM_SECS_BW_SUM_INTERVAL. XXXX */
|
||||
start += s_interval;
|
||||
* is not the same as NUM_SECS_BW_SUM_INTERVAL. XXXX */
|
||||
start += actual_interval_len;
|
||||
}
|
||||
} SMARTLIST_FOREACH_END(cp);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user