[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [tor/master] Detect insanely large circuit build state; don't give its length to rand_int
commit 42e4e156d95a1c28a666a5346d491c4ed71435dd
Author: Nick Mathewson <nickm@xxxxxxxxxxxxxx>
Date: Wed Jun 1 12:12:01 2011 -0400
Detect insanely large circuit build state; don't give its length to rand_int
---
changes/bug3306 | 4 ++++
src/or/circuitbuild.c | 10 +++++++++-
2 files changed, 13 insertions(+), 1 deletions(-)
diff --git a/changes/bug3306 b/changes/bug3306
index b1bb103..f868a24 100644
--- a/changes/bug3306
+++ b/changes/bug3306
@@ -3,3 +3,7 @@
correctly. Previously, it accepted values up to UINT_MAX, but
could return a negative number if given a value above INT_MAX+1.
Found by George Kadianakis. Fixes bug 3306; bugfix on 0.2.2pre14.
+
+ - Avoid a segfault when reading a malformed circuit build state
+ with more than INT_MAX entries. Found by wanoskarnet. Bugfix on
+ 0.2.2.4-alpha.
diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c
index 3f08448..6d7e711 100644
--- a/src/or/circuitbuild.c
+++ b/src/or/circuitbuild.c
@@ -678,7 +678,15 @@ circuit_build_times_shuffle_and_store_array(circuit_build_times_t *cbt,
log_notice(LD_CIRC, "The number of circuit times that this Tor version "
"uses to calculate build times is less than the number stored "
"in your state file. Decreasing the circuit time history from "
- "%d to %d.", num_times, CBT_NCIRCUITS_TO_OBSERVE);
+ "%lu to %d.", (unsigned long)num_times,
+ CBT_NCIRCUITS_TO_OBSERVE);
+ }
+
+ if (n > INT_MAX-1) {
+ log_warn(LD_CIRC, "For some insane reasons, you had %lu circuit build "
+ "observations in your state file. That's far too many; probably "
+ "there's a bug here.", (unsigned long)n);
+ n = INT_MAX-1;
}
/* This code can only be run on a compact array */
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits