summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2017-09-15 08:13:45 -0400
committerNick Mathewson <nickm@torproject.org>2017-09-15 08:13:45 -0400
commit72391fce2336cf028e6d0b6cb0be41b2db81ebcf (patch)
treea6b199769c85f27fc18491a319f3186d5082d2e9
parent61b5d053580410775a94fc24394a607642258ebd (diff)
parent6e87c0b23e622e95d8348650f7bdf2af75ab824e (diff)
downloadtor-72391fce2336cf028e6d0b6cb0be41b2db81ebcf.tar.gz
tor-72391fce2336cf028e6d0b6cb0be41b2db81ebcf.zip
Merge remote-tracking branch 'teor/bug23524'
-rw-r--r--changes/bug235244
-rw-r--r--src/or/bridges.c9
-rw-r--r--src/or/directory.c2
3 files changed, 11 insertions, 4 deletions
diff --git a/changes/bug23524 b/changes/bug23524
new file mode 100644
index 0000000000..c8ece52930
--- /dev/null
+++ b/changes/bug23524
@@ -0,0 +1,4 @@
+ o Minor bugfixes (DoS-resistance):
+ - If future code asks if there are any running bridges, without checking
+ if bridges are enabled, log a BUG warning rather than crashing.
+ Fixes 23524 on 0.3.0.1-alpha.
diff --git a/src/or/bridges.c b/src/or/bridges.c
index 0d4549dd16..1eec4e39ec 100644
--- a/src/or/bridges.c
+++ b/src/or/bridges.c
@@ -455,8 +455,8 @@ bridge_add_from_config(bridge_line_t *bridge_line)
b->fetch_status.schedule = DL_SCHED_BRIDGE;
b->fetch_status.backoff = DL_SCHED_RANDOM_EXPONENTIAL;
b->fetch_status.increment_on = DL_SCHED_INCREMENT_ATTEMPT;
- /* This will fail if UseBridges is not set -- and it does. */
- // download_status_reset(&b->fetch_status);
+ /* We can't reset the bridge's download status here, because UseBridges
+ * might be 0 now, and it might be changed to 1 much later. */
b->socks_args = bridge_line->socks_args;
if (!bridge_list)
bridge_list = smartlist_new();
@@ -625,6 +625,7 @@ fetch_bridge_descriptors(const or_options_t *options, time_t now)
SMARTLIST_FOREACH_BEGIN(bridge_list, bridge_info_t *, bridge)
{
+ /* This resets the download status on first use */
if (!download_status_is_ready(&bridge->fetch_status, now,
IMPOSSIBLE_TO_DOWNLOAD))
continue; /* don't bother, no need to retry yet */
@@ -835,7 +836,9 @@ learned_bridge_descriptor(routerinfo_t *ri, int from_cache)
MOCK_IMPL(int,
any_bridge_descriptors_known, (void))
{
- tor_assert(get_options()->UseBridges);
+ if (BUG(!get_options()->UseBridges)) {
+ return 0;
+ }
if (!bridge_list)
return 0;
diff --git a/src/or/directory.c b/src/or/directory.c
index 01d9fc617c..630524db67 100644
--- a/src/or/directory.c
+++ b/src/or/directory.c
@@ -5379,7 +5379,7 @@ find_dl_schedule(const download_status_t *dls, const or_options_t *options)
}
case DL_SCHED_BRIDGE:
/* A bridge client downloading bridge descriptors */
- if (any_bridge_descriptors_known()) {
+ if (options->UseBridges && any_bridge_descriptors_known()) {
/* A bridge client with one or more running bridges */
return options->TestingBridgeDownloadSchedule;
} else {