diff options
author | Nick Mathewson <nickm@torproject.org> | 2006-12-07 20:11:36 +0000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2006-12-07 20:11:36 +0000 |
commit | b4a90ca8a3e0a29afc2f2068cdfd02044e242965 (patch) | |
tree | 9e573de0a614c2269add61deecdef24535be07d5 /src | |
parent | 7c79495137bcd3989428d65b184038aa71fbae70 (diff) | |
download | tor-b4a90ca8a3e0a29afc2f2068cdfd02044e242965.tar tor-b4a90ca8a3e0a29afc2f2068cdfd02044e242965.tar.gz |
r11469@Kushana: nickm | 2006-12-07 15:11:04 -0500
Round stored/transmitted values for bandwidth usage. This might make some attacks work less well. This might well be voodoo, but it gives me a warm fuzzy feeling.
svn:r9048
Diffstat (limited to 'src')
-rw-r--r-- | src/or/hibernate.c | 11 | ||||
-rw-r--r-- | src/or/rephist.c | 9 |
2 files changed, 12 insertions, 8 deletions
diff --git a/src/or/hibernate.c b/src/or/hibernate.c index bd89240e4..f4249d2ef 100644 --- a/src/or/hibernate.c +++ b/src/or/hibernate.c @@ -530,6 +530,7 @@ accounting_set_wakeup_time(void) } } +#define ROUND_UP(x) (((x) + 0x3ff) & ~0x3ff) #define BW_ACCOUNTING_VERSION 1 /** Save all our bandwidth tracking information to disk. Return 0 on * success, -1 on failure. */ @@ -561,8 +562,8 @@ accounting_record_bandwidth_usage(time_t now, or_state_t *state) BW_ACCOUNTING_VERSION, time1, time2, - U64_PRINTF_ARG(n_bytes_read_in_interval), - U64_PRINTF_ARG(n_bytes_written_in_interval), + U64_PRINTF_ARG(ROUND_UP(n_bytes_read_in_interval)), + U64_PRINTF_ARG(ROUND_UP(n_bytes_written_in_interval)), (unsigned long)n_seconds_active_in_interval, (unsigned long)expected_bandwidth_usage); tor_snprintf(fname, sizeof(fname), "%s/bw_accounting", @@ -571,14 +572,16 @@ accounting_record_bandwidth_usage(time_t now, or_state_t *state) /* Now update the state */ state->AccountingIntervalStart = interval_start_time; - state->AccountingBytesReadInInterval = n_bytes_read_in_interval; - state->AccountingBytesWrittenInInterval = n_bytes_written_in_interval; + state->AccountingBytesReadInInterval = ROUND_UP(n_bytes_read_in_interval); + state->AccountingBytesWrittenInInterval = + ROUND_UP(n_bytes_written_in_interval); state->AccountingSecondsActive = n_seconds_active_in_interval; state->AccountingExpectedUsage = expected_bandwidth_usage; or_state_mark_dirty(state, 60); return r; } +#undef ROUND_UP /** Read stored accounting information from disk. Return 0 on success; * return -1 and change nothing on failure. */ diff --git a/src/or/rephist.c b/src/or/rephist.c index af295facf..19b6ea23b 100644 --- a/src/or/rephist.c +++ b/src/or/rephist.c @@ -596,13 +596,14 @@ rep_hist_fill_bandwidth_history(char *buf, size_t len, bw_array_t *b) } for (n=0; n<b->num_maxes_set; ++n,++i) { + uint64_t total; while (i >= NUM_TOTALS) i -= NUM_TOTALS; + /* Round the bandwidth used down to the nearest 1k. */ + total = b->totals[i] & ~0x3ff; if (n==(b->num_maxes_set-1)) - tor_snprintf(cp, len-(cp-buf), U64_FORMAT, - U64_PRINTF_ARG(b->totals[i])); + tor_snprintf(cp, len-(cp-buf), U64_FORMAT, U64_PRINTF_ARG(total)); else - tor_snprintf(cp, len-(cp-buf), U64_FORMAT",", - U64_PRINTF_ARG(b->totals[i])); + tor_snprintf(cp, len-(cp-buf), U64_FORMAT",", U64_PRINTF_ARG(total)); cp += strlen(cp); } return cp-buf; |