-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathReleaseNotes
6888 lines (6398 loc) · 373 KB
/
ReleaseNotes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
This document summarizes new features and bugfixes in each stable release
of Tor. If you want to see more detailed descriptions of the changes in
each development snapshot, see the ChangeLog file.
Changes in version 0.2.2.35 - 2011-12-16
Tor 0.2.2.35 fixes a critical heap-overflow security issue in Tor's
buffers code. Absolutely everybody should upgrade.
The bug relied on an incorrect calculation when making data continuous
in one of our IO buffers, if the first chunk of the buffer was
misaligned by just the wrong amount. The miscalculation would allow an
attacker to overflow a piece of heap-allocated memory. To mount this
attack, the attacker would need to either open a SOCKS connection to
Tor's SocksPort (usually restricted to localhost), or target a Tor
instance configured to make its connections through a SOCKS proxy
(which Tor does not do by default).
Good security practice requires that all heap-overflow bugs should be
presumed to be exploitable until proven otherwise, so we are treating
this as a potential code execution attack. Please upgrade immediately!
This bug does not affect bufferevents-based builds of Tor. Special
thanks to "Vektor" for reporting this issue to us!
Tor 0.2.2.35 also fixes several bugs in previous versions, including
crash bugs for unusual configurations, and a long-term bug that
would prevent Tor from starting on Windows machines with draconian
AV software.
With this release, we remind everyone that 0.2.0.x has reached its
formal end-of-life. Those Tor versions have many known flaws, and
nobody should be using them. You should upgrade -- ideally to the
0.2.2.x series. If you're using a Linux or BSD and its packages are
obsolete, stop using those packages and upgrade anyway.
The Tor 0.2.1.x series is also approaching its end-of-life: it will no
longer receive support after some time in early 2012.
o Major bugfixes:
- Fix a heap overflow bug that could occur when trying to pull
data into the first chunk of a buffer, when that chunk had
already had some data drained from it. Fixes CVE-2011-2778;
bugfix on 0.2.0.16-alpha. Reported by "Vektor".
- Initialize Libevent with the EVENT_BASE_FLAG_NOLOCK flag enabled, so
that it doesn't attempt to allocate a socketpair. This could cause
some problems on Windows systems with overzealous firewalls. Fix for
bug 4457; workaround for Libevent versions 2.0.1-alpha through
2.0.15-stable.
- If we mark an OR connection for close based on a cell we process,
don't process any further cells on it. We already avoid further
reads on marked-for-close connections, but now we also discard the
cells we'd already read. Fixes bug 4299; bugfix on 0.2.0.10-alpha,
which was the first version where we might mark a connection for
close based on processing a cell on it.
- Correctly sanity-check that we don't underflow on a memory
allocation (and then assert) for hidden service introduction
point decryption. Bug discovered by Dan Rosenberg. Fixes bug 4410;
bugfix on 0.2.1.5-alpha.
- Fix a memory leak when we check whether a hidden service
descriptor has any usable introduction points left. Fixes bug
4424. Bugfix on 0.2.2.25-alpha.
- Don't crash when we're running as a relay and don't have a GeoIP
file. Bugfix on 0.2.2.34; fixes bug 4340. This backports a fix
we've had in the 0.2.3.x branch already.
- When running as a client, do not print a misleading (and plain
wrong) log message that we're collecting "directory request"
statistics: clients don't collect statistics. Also don't create a
useless (because empty) stats file in the stats/ directory. Fixes
bug 4353; bugfix on 0.2.2.34.
o Minor bugfixes:
- Detect failure to initialize Libevent. This fix provides better
detection for future instances of bug 4457.
- Avoid frequent calls to the fairly expensive cull_wedged_cpuworkers
function. This was eating up hideously large amounts of time on some
busy servers. Fixes bug 4518; bugfix on 0.0.9.8.
- Resolve an integer overflow bug in smartlist_ensure_capacity().
Fixes bug 4230; bugfix on Tor 0.1.0.1-rc. Based on a patch by
Mansour Moufid.
- Don't warn about unused log_mutex in log.c when building with
--disable-threads using a recent GCC. Fixes bug 4437; bugfix on
0.1.0.6-rc which introduced --disable-threads.
- When configuring, starting, or stopping an NT service, stop
immediately after the service configuration attempt has succeeded
or failed. Fixes bug 3963; bugfix on 0.2.0.7-alpha.
- When sending a NETINFO cell, include the original address
received for the other side, not its canonical address. Found
by "troll_un"; fixes bug 4349; bugfix on 0.2.0.10-alpha.
- Fix a typo in a hibernation-related log message. Fixes bug 4331;
bugfix on 0.2.2.23-alpha; found by "tmpname0901".
- Fix a memory leak in launch_direct_bridge_descriptor_fetch() that
occurred when a client tried to fetch a descriptor for a bridge
in ExcludeNodes. Fixes bug 4383; bugfix on 0.2.2.25-alpha.
- Backport fixes for a pair of compilation warnings on Windows.
Fixes bug 4521; bugfix on 0.2.2.28-beta and on 0.2.2.29-beta.
- If we had ever tried to call tor_addr_to_str on an address of
unknown type, we would have done a strdup on an uninitialized
buffer. Now we won't. Fixes bug 4529; bugfix on 0.2.1.3-alpha.
Reported by "troll_un".
- Correctly detect and handle transient lookup failures from
tor_addr_lookup. Fixes bug 4530; bugfix on 0.2.1.5-alpha.
Reported by "troll_un".
- Fix null-pointer access that could occur if TLS allocation failed.
Fixes bug 4531; bugfix on 0.2.0.20-rc. Found by "troll_un".
- Use tor_socket_t type for listener argument to accept(). Fixes bug
4535; bugfix on 0.2.2.28-beta. Found by "troll_un".
o Minor features:
- Add two new config options for directory authorities:
AuthDirFastGuarantee sets a bandwidth threshold for guaranteeing the
Fast flag, and AuthDirGuardBWGuarantee sets a bandwidth threshold
that is always sufficient to satisfy the bandwidth requirement for
the Guard flag. Now it will be easier for researchers to simulate
Tor networks with different values. Resolves ticket 4484.
- When Tor ignores a hidden service specified in its configuration,
include the hidden service's directory in the warning message.
Previously, we would only tell the user that some hidden service
was ignored. Bugfix on 0.0.6; fixes bug 4426.
- Update to the December 6 2011 Maxmind GeoLite Country database.
o Packaging changes:
- Make it easier to automate expert package builds on Windows,
by removing an absolute path from makensis.exe command.
Changes in version 0.2.2.34 - 2011-10-26
Tor 0.2.2.34 fixes a critical anonymity vulnerability where an attacker
can deanonymize Tor users. Everybody should upgrade.
The attack relies on four components: 1) Clients reuse their TLS cert
when talking to different relays, so relays can recognize a user by
the identity key in her cert. 2) An attacker who knows the client's
identity key can probe each guard relay to see if that identity key
is connected to that guard relay right now. 3) A variety of active
attacks in the literature (starting from "Low-Cost Traffic Analysis
of Tor" by Murdoch and Danezis in 2005) allow a malicious website to
discover the guard relays that a Tor user visiting the website is using.
4) Clients typically pick three guards at random, so the set of guards
for a given user could well be a unique fingerprint for her. This
release fixes components #1 and #2, which is enough to block the attack;
the other two remain as open research problems. Special thanks to
"frosty_un" for reporting the issue to us!
Clients should upgrade so they are no longer recognizable by the TLS
certs they present. Relays should upgrade so they no longer allow a
remote attacker to probe them to test whether unpatched clients are
currently connected to them.
This release also fixes several vulnerabilities that allow an attacker
to enumerate bridge relays. Some bridge enumeration attacks still
remain; see for example proposal 188.
o Privacy/anonymity fixes (clients):
- Clients and bridges no longer send TLS certificate chains on
outgoing OR connections. Previously, each client or bridge would
use the same cert chain for all outgoing OR connections until
its IP address changes, which allowed any relay that the client
or bridge contacted to determine which entry guards it is using.
Fixes CVE-2011-2768. Bugfix on 0.0.9pre5; found by "frosty_un".
- If a relay receives a CREATE_FAST cell on a TLS connection, it
no longer considers that connection as suitable for satisfying a
circuit EXTEND request. Now relays can protect clients from the
CVE-2011-2768 issue even if the clients haven't upgraded yet.
- Directory authorities no longer assign the Guard flag to relays
that haven't upgraded to the above "refuse EXTEND requests
to client connections" fix. Now directory authorities can
protect clients from the CVE-2011-2768 issue even if neither
the clients nor the relays have upgraded yet. There's a new
"GiveGuardFlagTo_CVE_2011_2768_VulnerableRelays" config option
to let us transition smoothly, else tomorrow there would be no
guard relays.
o Privacy/anonymity fixes (bridge enumeration):
- Bridge relays now do their directory fetches inside Tor TLS
connections, like all the other clients do, rather than connecting
directly to the DirPort like public relays do. Removes another
avenue for enumerating bridges. Fixes bug 4115; bugfix on 0.2.0.35.
- Bridges relays now build circuits for themselves in a more similar
way to how clients build them. Removes another avenue for
enumerating bridges. Fixes bug 4124; bugfix on 0.2.0.3-alpha,
when bridges were introduced.
- Bridges now refuse CREATE or CREATE_FAST cells on OR connections
that they initiated. Relays could distinguish incoming bridge
connections from client connections, creating another avenue for
enumerating bridges. Fixes CVE-2011-2769. Bugfix on 0.2.0.3-alpha.
Found by "frosty_un".
o Major bugfixes:
- Fix a crash bug when changing node restrictions while a DNS lookup
is in-progress. Fixes bug 4259; bugfix on 0.2.2.25-alpha. Bugfix
by "Tey'".
- Don't launch a useless circuit after failing to use one of a
hidden service's introduction points. Previously, we would
launch a new introduction circuit, but not set the hidden service
which that circuit was intended to connect to, so it would never
actually be used. A different piece of code would then create a
new introduction circuit correctly. Bug reported by katmagic and
found by Sebastian Hahn. Bugfix on 0.2.1.13-alpha; fixes bug 4212.
o Minor bugfixes:
- Change an integer overflow check in the OpenBSD_Malloc code so
that GCC is less likely to eliminate it as impossible. Patch
from Mansour Moufid. Fixes bug 4059.
- When a hidden service turns an extra service-side introduction
circuit into a general-purpose circuit, free the rend_data and
intro_key fields first, so we won't leak memory if the circuit
is cannibalized for use as another service-side introduction
circuit. Bugfix on 0.2.1.7-alpha; fixes bug 4251.
- Bridges now skip DNS self-tests, to act a little more stealthily.
Fixes bug 4201; bugfix on 0.2.0.3-alpha, which first introduced
bridges. Patch by "warms0x".
- Fix internal bug-checking logic that was supposed to catch
failures in digest generation so that it will fail more robustly
if we ask for a nonexistent algorithm. Found by Coverity Scan.
Bugfix on 0.2.2.1-alpha; fixes Coverity CID 479.
- Report any failure in init_keys() calls launched because our
IP address has changed. Spotted by Coverity Scan. Bugfix on
0.1.1.4-alpha; fixes CID 484.
o Minor bugfixes (log messages and documentation):
- Remove a confusing dollar sign from the example fingerprint in the
man page, and also make the example fingerprint a valid one. Fixes
bug 4309; bugfix on 0.2.1.3-alpha.
- The next version of Windows will be called Windows 8, and it has
a major version of 6, minor version of 2. Correctly identify that
version instead of calling it "Very recent version". Resolves
ticket 4153; reported by funkstar.
- Downgrade log messages about circuit timeout calibration from
"notice" to "info": they don't require or suggest any human
intervention. Patch from Tom Lowenthal. Fixes bug 4063;
bugfix on 0.2.2.14-alpha.
o Minor features:
- Turn on directory request statistics by default and include them in
extra-info descriptors. Don't break if we have no GeoIP database.
Backported from 0.2.3.1-alpha; implements ticket 3951.
- Update to the October 4 2011 Maxmind GeoLite Country database.
Changes in version 0.2.1.31 - 2011-10-26
Tor 0.2.1.31 backports important security and privacy fixes for
oldstable. This release is intended only for package maintainers and
others who cannot use the 0.2.2 stable series. All others should be
using Tor 0.2.2.x or newer.
o Security fixes (also included in 0.2.2.x):
- Replace all potentially sensitive memory comparison operations
with versions whose runtime does not depend on the data being
compared. This will help resist a class of attacks where an
adversary can use variations in timing information to learn
sensitive data. Fix for one case of bug 3122. (Safe memcmp
implementation by Robert Ransom based partially on code by DJB.)
- Fix an assert in parsing router descriptors containing IPv6
addresses. This one took down the directory authorities when
somebody tried some experimental code. Bugfix on 0.2.1.3-alpha.
o Privacy/anonymity fixes (also included in 0.2.2.x):
- Clients and bridges no longer send TLS certificate chains on
outgoing OR connections. Previously, each client or bridge would
use the same cert chain for all outgoing OR connections until
its IP address changes, which allowed any relay that the client
or bridge contacted to determine which entry guards it is using.
Fixes CVE-2011-2768. Bugfix on 0.0.9pre5; found by "frosty_un".
- If a relay receives a CREATE_FAST cell on a TLS connection, it
no longer considers that connection as suitable for satisfying a
circuit EXTEND request. Now relays can protect clients from the
CVE-2011-2768 issue even if the clients haven't upgraded yet.
- Bridges now refuse CREATE or CREATE_FAST cells on OR connections
that they initiated. Relays could distinguish incoming bridge
connections from client connections, creating another avenue for
enumerating bridges. Fixes CVE-2011-2769. Bugfix on 0.2.0.3-alpha.
Found by "frosty_un".
- When receiving a hidden service descriptor, check that it is for
the hidden service we wanted. Previously, Tor would store any
hidden service descriptors that a directory gave it, whether it
wanted them or not. This wouldn't have let an attacker impersonate
a hidden service, but it did let directories pre-seed a client
with descriptors that it didn't want. Bugfix on 0.0.6.
- Avoid linkability based on cached hidden service descriptors: forget
all hidden service descriptors cached as a client when processing a
SIGNAL NEWNYM command. Fixes bug 3000; bugfix on 0.0.6.
- Make the bridge directory authority refuse to answer directory
requests for "all" descriptors. It used to include bridge
descriptors in its answer, which was a major information leak.
Found by "piebeer". Bugfix on 0.2.0.3-alpha.
- Don't attach new streams to old rendezvous circuits after SIGNAL
NEWNYM. Previously, we would keep using an existing rendezvous
circuit if it remained open (i.e. if it were kept open by a
long-lived stream, or if a new stream were attached to it before
Tor could notice that it was old and no longer in use). Bugfix on
0.1.1.15-rc; fixes bug 3375.
o Minor bugfixes (also included in 0.2.2.x):
- When we restart our relay, we might get a successful connection
from the outside before we've started our reachability tests,
triggering a warning: "ORPort found reachable, but I have no
routerinfo yet. Failing to inform controller of success." This
bug was harmless unless Tor is running under a controller
like Vidalia, in which case the controller would never get a
REACHABILITY_SUCCEEDED status event. Bugfix on 0.1.2.6-alpha;
fixes bug 1172.
- Build correctly on OSX with zlib 1.2.4 and higher with all warnings
enabled. Fixes bug 1526.
- Remove undocumented option "-F" from tor-resolve: it hasn't done
anything since 0.2.1.16-rc.
- Avoid signed/unsigned comparisons by making SIZE_T_CEILING unsigned.
None of the cases where we did this before were wrong, but by making
this change we avoid warnings. Fixes bug 2475; bugfix on 0.2.1.28.
- Fix a rare crash bug that could occur when a client was configured
with a large number of bridges. Fixes bug 2629; bugfix on
0.2.1.2-alpha. Bugfix by trac user "shitlei".
- Correct the warning displayed when a rendezvous descriptor exceeds
the maximum size. Fixes bug 2750; bugfix on 0.2.1.5-alpha. Found by
John Brooks.
- Fix an uncommon assertion failure when running with DNSPort under
heavy load. Fixes bug 2933; bugfix on 0.2.0.1-alpha.
- When warning about missing zlib development packages during compile,
give the correct package names. Bugfix on 0.2.0.1-alpha.
- Require that introduction point keys and onion keys have public
exponent 65537. Bugfix on 0.2.0.10-alpha.
- Do not crash when our configuration file becomes unreadable, for
example due to a permissions change, between when we start up
and when a controller calls SAVECONF. Fixes bug 3135; bugfix
on 0.0.9pre6.
- Fix warnings from GCC 4.6's "-Wunused-but-set-variable" option.
Fixes bug 3208.
- Always NUL-terminate the sun_path field of a sockaddr_un before
passing it to the kernel. (Not a security issue: kernels are
smart enough to reject bad sockaddr_uns.) Found by Coverity;
CID #428. Bugfix on Tor 0.2.0.3-alpha.
- Don't stack-allocate the list of supplementary GIDs when we're
about to log them. Stack-allocating NGROUPS_MAX gid_t elements
could take up to 256K, which is way too much stack. Found by
Coverity; CID #450. Bugfix on 0.2.1.7-alpha.
o Minor bugfixes (only in 0.2.1.x):
- Resume using micro-version numbers in 0.2.1.x: our Debian packages
rely on them. Bugfix on 0.2.1.30.
- Use git revisions instead of svn revisions when generating our
micro-version numbers. Bugfix on 0.2.1.15-rc; fixes bug 2402.
o Minor features (also included in 0.2.2.x):
- Adjust the expiration time on our SSL session certificates to
better match SSL certs seen in the wild. Resolves ticket 4014.
- Allow nameservers with IPv6 address. Resolves bug 2574.
- Update to the October 4 2011 Maxmind GeoLite Country database.
Changes in version 0.2.2.33 - 2011-09-13
Tor 0.2.2.33 fixes several bugs, and includes a slight tweak to Tor's
TLS handshake that makes relays and bridges that run this new version
reachable from Iran again.
o Major bugfixes:
- Avoid an assertion failure when reloading a configuration with
TrackExitHosts changes. Found and fixed by 'laruldan'. Fixes bug
3923; bugfix on 0.2.2.25-alpha.
o Minor features (security):
- Check for replays of the public-key encrypted portion of an
INTRODUCE1 cell, in addition to the current check for replays of
the g^x value. This prevents a possible class of active attacks
by an attacker who controls both an introduction point and a
rendezvous point, and who uses the malleability of AES-CTR to
alter the encrypted g^x portion of the INTRODUCE1 cell. We think
that these attacks are infeasible (requiring the attacker to send
on the order of zettabytes of altered cells in a short interval),
but we'd rather block them off in case there are any classes of
this attack that we missed. Reported by Willem Pinckaers.
o Minor features:
- Adjust the expiration time on our SSL session certificates to
better match SSL certs seen in the wild. Resolves ticket 4014.
- Change the default required uptime for a relay to be accepted as
a HSDir (hidden service directory) from 24 hours to 25 hours.
Improves on 0.2.0.10-alpha; resolves ticket 2649.
- Add a VoteOnHidServDirectoriesV2 config option to allow directory
authorities to abstain from voting on assignment of the HSDir
consensus flag. Related to bug 2649.
- Update to the September 6 2011 Maxmind GeoLite Country database.
o Minor bugfixes (documentation and log messages):
- Correct the man page to explain that HashedControlPassword and
CookieAuthentication can both be set, in which case either method
is sufficient to authenticate to Tor. Bugfix on 0.2.0.7-alpha,
when we decided to allow these config options to both be set. Issue
raised by bug 3898.
- Demote the 'replay detected' log message emitted when a hidden
service receives the same Diffie-Hellman public key in two different
INTRODUCE2 cells to info level. A normal Tor client can cause that
log message during its normal operation. Bugfix on 0.2.1.6-alpha;
fixes part of bug 2442.
- Demote the 'INTRODUCE2 cell is too {old,new}' log message to info
level. There is nothing that a hidden service's operator can do
to fix its clients' clocks. Bugfix on 0.2.1.6-alpha; fixes part
of bug 2442.
- Clarify a log message specifying the characters permitted in
HiddenServiceAuthorizeClient client names. Previously, the log
message said that "[A-Za-z0-9+-_]" were permitted; that could have
given the impression that every ASCII character between "+" and "_"
was permitted. Now we say "[A-Za-z0-9+_-]". Bugfix on 0.2.1.5-alpha.
o Build fixes:
- Provide a substitute implementation of lround() for MSVC, which
apparently lacks it. Patch from Gisle Vanem.
- Clean up some code issues that prevented Tor from building on older
BSDs. Fixes bug 3894; reported by "grarpamp".
- Search for a platform-specific version of "ar" when cross-compiling.
Should fix builds on iOS. Resolves bug 3909, found by Marco Bonetti.
Changes in version 0.2.2.32 - 2011-08-27
The Tor 0.2.2 release series is dedicated to the memory of Andreas
Pfitzmann (1958-2010), a pioneer in anonymity and privacy research,
a founder of the PETS community, a leader in our field, a mentor,
and a friend. He left us with these words: "I had the possibility
to contribute to this world that is not as it should be. I hope I
could help in some areas to make the world a better place, and that
I could also encourage other people to be engaged in improving the
world. Please, stay engaged. This world needs you, your love, your
initiative -- now I cannot be part of that anymore."
Tor 0.2.2.32, the first stable release in the 0.2.2 branch, is finally
ready. More than two years in the making, this release features improved
client performance and hidden service reliability, better compatibility
for Android, correct behavior for bridges that listen on more than
one address, more extensible and flexible directory object handling,
better reporting of network statistics, improved code security, and
many many other features and bugfixes.
o Major features (client performance):
- When choosing which cells to relay first, relays now favor circuits
that have been quiet recently, to provide lower latency for
low-volume circuits. By default, relays enable or disable this
feature based on a setting in the consensus. They can override
this default by using the new "CircuitPriorityHalflife" config
option. Design and code by Ian Goldberg, Can Tang, and Chris
Alexander.
- Directory authorities now compute consensus weightings that instruct
clients how to weight relays flagged as Guard, Exit, Guard+Exit,
and no flag. Clients use these weightings to distribute network load
more evenly across these different relay types. The weightings are
in the consensus so we can change them globally in the future. Extra
thanks to "outofwords" for finding some nasty security bugs in
the first implementation of this feature.
o Major features (client performance, circuit build timeout):
- Tor now tracks how long it takes to build client-side circuits
over time, and adapts its timeout to local network performance.
Since a circuit that takes a long time to build will also provide
bad performance, we get significant latency improvements by
discarding the slowest 20% of circuits. Specifically, Tor creates
circuits more aggressively than usual until it has enough data
points for a good timeout estimate. Implements proposal 151.
- Circuit build timeout constants can be controlled by consensus
parameters. We set good defaults for these parameters based on
experimentation on broadband and simulated high-latency links.
- Circuit build time learning can be disabled via consensus parameter
or by the client via a LearnCircuitBuildTimeout config option. We
also automatically disable circuit build time calculation if either
AuthoritativeDirectory is set, or if we fail to write our state
file. Implements ticket 1296.
o Major features (relays use their capacity better):
- Set SO_REUSEADDR socket option on all sockets, not just
listeners. This should help busy exit nodes avoid running out of
useable ports just because all the ports have been used in the
near past. Resolves issue 2850.
- Relays now save observed peak bandwidth throughput rates to their
state file (along with total usage, which was already saved),
so that they can determine their correct estimated bandwidth on
restart. Resolves bug 1863, where Tor relays would reset their
estimated bandwidth to 0 after restarting.
- Lower the maximum weighted-fractional-uptime cutoff to 98%. This
should give us approximately 40-50% more Guard-flagged nodes,
improving the anonymity the Tor network can provide and also
decreasing the dropoff in throughput that relays experience when
they first get the Guard flag.
- Directory authorities now take changes in router IP address and
ORPort into account when determining router stability. Previously,
if a router changed its IP or ORPort, the authorities would not
treat it as having any downtime for the purposes of stability
calculation, whereas clients would experience downtime since the
change would take a while to propagate to them. Resolves issue 1035.
- New AccelName and AccelDir options add support for dynamic OpenSSL
hardware crypto acceleration engines.
o Major features (relays control their load better):
- Exit relays now try harder to block exit attempts from unknown
relays, to make it harder for people to use them as one-hop proxies
a la tortunnel. Controlled by the refuseunknownexits consensus
parameter (currently enabled), or you can override it on your
relay with the RefuseUnknownExits torrc option. Resolves bug 1751;
based on a variant of proposal 163.
- Add separate per-conn write limiting to go with the per-conn read
limiting. We added a global write limit in Tor 0.1.2.5-alpha,
but never per-conn write limits.
- New consensus params "bwconnrate" and "bwconnburst" to let us
rate-limit client connections as they enter the network. It's
controlled in the consensus so we can turn it on and off for
experiments. It's starting out off. Based on proposal 163.
o Major features (controllers):
- Export GeoIP information on bridge usage to controllers even if we
have not yet been running for 24 hours. Now Vidalia bridge operators
can get more accurate and immediate feedback about their
contributions to the network.
- Add an __OwningControllerProcess configuration option and a
TAKEOWNERSHIP control-port command. Now a Tor controller can ensure
that when it exits, Tor will shut down. Implements feature 3049.
o Major features (directory authorities):
- Directory authorities now create, vote on, and serve multiple
parallel formats of directory data as part of their voting process.
Partially implements Proposal 162: "Publish the consensus in
multiple flavors".
- Directory authorities now agree on and publish small summaries
of router information that clients can use in place of regular
server descriptors. This transition will allow Tor 0.2.3 clients
to use far less bandwidth for downloading information about the
network. Begins the implementation of Proposal 158: "Clients
download consensus + microdescriptors".
- The directory voting system is now extensible to use multiple hash
algorithms for signatures and resource selection. Newer formats
are signed with SHA256, with a possibility for moving to a better
hash algorithm in the future.
- Directory authorities can now vote on arbitary integer values as
part of the consensus process. This is designed to help set
network-wide parameters. Implements proposal 167.
o Major features and bugfixes (node selection):
- Revise and reconcile the meaning of the ExitNodes, EntryNodes,
ExcludeEntryNodes, ExcludeExitNodes, ExcludeNodes, and Strict*Nodes
options. Previously, we had been ambiguous in describing what
counted as an "exit" node, and what operations exactly "StrictNodes
0" would permit. This created confusion when people saw nodes built
through unexpected circuits, and made it hard to tell real bugs from
surprises. Now the intended behavior is:
. "Exit", in the context of ExitNodes and ExcludeExitNodes, means
a node that delivers user traffic outside the Tor network.
. "Entry", in the context of EntryNodes, means a node used as the
first hop of a multihop circuit. It doesn't include direct
connections to directory servers.
. "ExcludeNodes" applies to all nodes.
. "StrictNodes" changes the behavior of ExcludeNodes only. When
StrictNodes is set, Tor should avoid all nodes listed in
ExcludeNodes, even when it will make user requests fail. When
StrictNodes is *not* set, then Tor should follow ExcludeNodes
whenever it can, except when it must use an excluded node to
perform self-tests, connect to a hidden service, provide a
hidden service, fulfill a .exit request, upload directory
information, or fetch directory information.
Collectively, the changes to implement the behavior fix bug 1090.
- If EntryNodes, ExitNodes, ExcludeNodes, or ExcludeExitNodes
change during a config reload, mark and discard all our origin
circuits. This fix should address edge cases where we change the
config options and but then choose a circuit that we created before
the change.
- Make EntryNodes config option much more aggressive even when
StrictNodes is not set. Before it would prepend your requested
entrynodes to your list of guard nodes, but feel free to use others
after that. Now it chooses only from your EntryNodes if any of
those are available, and only falls back to others if a) they're
all down and b) StrictNodes is not set.
- Now we refresh your entry guards from EntryNodes at each consensus
fetch -- rather than just at startup and then they slowly rot as
the network changes.
- Add support for the country code "{??}" in torrc options like
ExcludeNodes, to indicate all routers of unknown country. Closes
bug 1094.
- ExcludeNodes now takes precedence over EntryNodes and ExitNodes: if
a node is listed in both, it's treated as excluded.
- ExcludeNodes now applies to directory nodes -- as a preference if
StrictNodes is 0, or an absolute requirement if StrictNodes is 1.
Don't exclude all the directory authorities and set StrictNodes to 1
unless you really want your Tor to break.
- ExcludeNodes and ExcludeExitNodes now override exit enclaving.
- ExcludeExitNodes now overrides .exit requests.
- We don't use bridges listed in ExcludeNodes.
- When StrictNodes is 1:
. We now apply ExcludeNodes to hidden service introduction points
and to rendezvous points selected by hidden service users. This
can make your hidden service less reliable: use it with caution!
. If we have used ExcludeNodes on ourself, do not try relay
reachability self-tests.
. If we have excluded all the directory authorities, we will not
even try to upload our descriptor if we're a relay.
. Do not honor .exit requests to an excluded node.
- When the set of permitted nodes changes, we now remove any mappings
introduced via TrackExitHosts to now-excluded nodes. Bugfix on
0.1.0.1-rc.
- We never cannibalize a circuit that had excluded nodes on it, even
if StrictNodes is 0. Bugfix on 0.1.0.1-rc.
- Improve log messages related to excluded nodes.
o Major features (misc):
- Numerous changes, bugfixes, and workarounds from Nathan Freitas
to help Tor build correctly for Android phones.
- The options SocksPort, ControlPort, and so on now all accept a
value "auto" that opens a socket on an OS-selected port. A
new ControlPortWriteToFile option tells Tor to write its
actual control port or ports to a chosen file. If the option
ControlPortFileGroupReadable is set, the file is created as
group-readable. Now users can run two Tor clients on the same
system without needing to manually mess with parameters. Resolves
part of ticket 3076.
- Tor now supports tunneling all of its outgoing connections over
a SOCKS proxy, using the SOCKS4Proxy and/or SOCKS5Proxy
configuration options. Code by Christopher Davis.
o Code security improvements:
- Replace all potentially sensitive memory comparison operations
with versions whose runtime does not depend on the data being
compared. This will help resist a class of attacks where an
adversary can use variations in timing information to learn
sensitive data. Fix for one case of bug 3122. (Safe memcmp
implementation by Robert Ransom based partially on code by DJB.)
- Enable Address Space Layout Randomization (ASLR) and Data Execution
Prevention (DEP) by default on Windows to make it harder for
attackers to exploit vulnerabilities. Patch from John Brooks.
- New "--enable-gcc-hardening" ./configure flag (off by default)
to turn on gcc compile time hardening options. It ensures
that signed ints have defined behavior (-fwrapv), enables
-D_FORTIFY_SOURCE=2 (requiring -O2), adds stack smashing protection
with canaries (-fstack-protector-all), turns on ASLR protection if
supported by the kernel (-fPIE, -pie), and adds additional security
related warnings. Verified to work on Mac OS X and Debian Lenny.
- New "--enable-linker-hardening" ./configure flag (off by default)
to turn on ELF specific hardening features (relro, now). This does
not work with Mac OS X or any other non-ELF binary format.
- Always search the Windows system directory for system DLLs, and
nowhere else. Bugfix on 0.1.1.23; fixes bug 1954.
- New DisableAllSwap option. If set to 1, Tor will attempt to lock all
current and future memory pages via mlockall(). On supported
platforms (modern Linux and probably BSD but not Windows or OS X),
this should effectively disable any and all attempts to page out
memory. This option requires that you start your Tor as root --
if you use DisableAllSwap, please consider using the User option
to properly reduce the privileges of your Tor.
o Major bugfixes (crashes):
- Fix crash bug on platforms where gmtime and localtime can return
NULL. Windows 7 users were running into this one. Fixes part of bug
2077. Bugfix on all versions of Tor. Found by boboper.
- Introduce minimum/maximum values that clients will believe
from the consensus. Now we'll have a better chance to avoid crashes
or worse when a consensus param has a weird value.
- Fix a rare crash bug that could occur when a client was configured
with a large number of bridges. Fixes bug 2629; bugfix on
0.2.1.2-alpha. Bugfix by trac user "shitlei".
- Do not crash when our configuration file becomes unreadable, for
example due to a permissions change, between when we start up
and when a controller calls SAVECONF. Fixes bug 3135; bugfix
on 0.0.9pre6.
- If we're in the pathological case where there's no exit bandwidth
but there is non-exit bandwidth, or no guard bandwidth but there
is non-guard bandwidth, don't crash during path selection. Bugfix
on 0.2.0.3-alpha.
- Fix a crash bug when trying to initialize the evdns module in
Libevent 2. Bugfix on 0.2.1.16-rc.
o Major bugfixes (stability):
- Fix an assert in parsing router descriptors containing IPv6
addresses. This one took down the directory authorities when
somebody tried some experimental code. Bugfix on 0.2.1.3-alpha.
- Fix an uncommon assertion failure when running with DNSPort under
heavy load. Fixes bug 2933; bugfix on 0.2.0.1-alpha.
- Treat an unset $HOME like an empty $HOME rather than triggering an
assert. Bugfix on 0.0.8pre1; fixes bug 1522.
- More gracefully handle corrupt state files, removing asserts
in favor of saving a backup and resetting state.
- Instead of giving an assertion failure on an internal mismatch
on estimated freelist size, just log a BUG warning and try later.
Mitigates but does not fix bug 1125.
- Fix an assert that got triggered when using the TestingTorNetwork
configuration option and then issuing a GETINFO config-text control
command. Fixes bug 2250; bugfix on 0.2.1.2-alpha.
- If the cached cert file is unparseable, warn but don't exit.
o Privacy fixes (relays/bridges):
- Don't list Windows capabilities in relay descriptors. We never made
use of them, and maybe it's a bad idea to publish them. Bugfix
on 0.1.1.8-alpha.
- If the Nickname configuration option isn't given, Tor would pick a
nickname based on the local hostname as the nickname for a relay.
Because nicknames are not very important in today's Tor and the
"Unnamed" nickname has been implemented, this is now problematic
behavior: It leaks information about the hostname without being
useful at all. Fixes bug 2979; bugfix on 0.1.2.2-alpha, which
introduced the Unnamed nickname. Reported by tagnaq.
- Maintain separate TLS contexts and certificates for incoming and
outgoing connections in bridge relays. Previously we would use the
same TLS contexts and certs for incoming and outgoing connections.
Bugfix on 0.2.0.3-alpha; addresses bug 988.
- Maintain separate identity keys for incoming and outgoing TLS
contexts in bridge relays. Previously we would use the same
identity keys for incoming and outgoing TLS contexts. Bugfix on
0.2.0.3-alpha; addresses the other half of bug 988.
- Make the bridge directory authority refuse to answer directory
requests for "all descriptors". It used to include bridge
descriptors in its answer, which was a major information leak.
Found by "piebeer". Bugfix on 0.2.0.3-alpha.
o Privacy fixes (clients):
- When receiving a hidden service descriptor, check that it is for
the hidden service we wanted. Previously, Tor would store any
hidden service descriptors that a directory gave it, whether it
wanted them or not. This wouldn't have let an attacker impersonate
a hidden service, but it did let directories pre-seed a client
with descriptors that it didn't want. Bugfix on 0.0.6.
- Start the process of disabling ".exit" address notation, since it
can be used for a variety of esoteric application-level attacks
on users. To reenable it, set "AllowDotExit 1" in your torrc. Fix
on 0.0.9rc5.
- Reject attempts at the client side to open connections to private
IP addresses (like 127.0.0.1, 10.0.0.1, and so on) with
a randomly chosen exit node. Attempts to do so are always
ill-defined, generally prevented by exit policies, and usually
in error. This will also help to detect loops in transparent
proxy configurations. You can disable this feature by setting
"ClientRejectInternalAddresses 0" in your torrc.
- Log a notice when we get a new control connection. Now it's easier
for security-conscious users to recognize when a local application
is knocking on their controller door. Suggested by bug 1196.
o Privacy fixes (newnym):
- Avoid linkability based on cached hidden service descriptors: forget
all hidden service descriptors cached as a client when processing a
SIGNAL NEWNYM command. Fixes bug 3000; bugfix on 0.0.6.
- On SIGHUP, do not clear out all TrackHostExits mappings, client
DNS cache entries, and virtual address mappings: that's what
NEWNYM is for. Fixes bug 1345; bugfix on 0.1.0.1-rc.
- Don't attach new streams to old rendezvous circuits after SIGNAL
NEWNYM. Previously, we would keep using an existing rendezvous
circuit if it remained open (i.e. if it were kept open by a
long-lived stream, or if a new stream were attached to it before
Tor could notice that it was old and no longer in use). Bugfix on
0.1.1.15-rc; fixes bug 3375.
o Major bugfixes (relay bandwidth accounting):
- Fix a bug that could break accounting on 64-bit systems with large
time_t values, making them hibernate for impossibly long intervals.
Fixes bug 2146. Bugfix on 0.0.9pre6; fix by boboper.
- Fix a bug in bandwidth accounting that could make us use twice
the intended bandwidth when our interval start changes due to
daylight saving time. Now we tolerate skew in stored vs computed
interval starts: if the start of the period changes by no more than
50% of the period's duration, we remember bytes that we transferred
in the old period. Fixes bug 1511; bugfix on 0.0.9pre5.
o Major bugfixes (bridges):
- Bridges now use "reject *:*" as their default exit policy. Bugfix
on 0.2.0.3-alpha. Fixes bug 1113.
- If you configure your bridge with a known identity fingerprint,
and the bridge authority is unreachable (as it is in at least
one country now), fall back to directly requesting the descriptor
from the bridge. Finishes the feature started in 0.2.0.10-alpha;
closes bug 1138.
- Fix a bug where bridge users who configure the non-canonical
address of a bridge automatically switch to its canonical
address. If a bridge listens at more than one address, it
should be able to advertise those addresses independently and
any non-blocked addresses should continue to work. Bugfix on Tor
0.2.0.3-alpha. Fixes bug 2510.
- If you configure Tor to use bridge A, and then quit and
configure Tor to use bridge B instead (or if you change Tor
to use bridge B via the controller), it would happily continue
to use bridge A if it's still reachable. While this behavior is
a feature if your goal is connectivity, in some scenarios it's a
dangerous bug. Bugfix on Tor 0.2.0.1-alpha; fixes bug 2511.
- When the controller configures a new bridge, don't wait 10 to 60
seconds before trying to fetch its descriptor. Bugfix on
0.2.0.3-alpha; fixes bug 3198 (suggested by 2355).
o Major bugfixes (directory authorities):
- Many relays have been falling out of the consensus lately because
not enough authorities know about their descriptor for them to get
a majority of votes. When we deprecated the v2 directory protocol,
we got rid of the only way that v3 authorities can hear from each
other about other descriptors. Now authorities examine every v3
vote for new descriptors, and fetch them from that authority. Bugfix
on 0.2.1.23.
- Authorities could be tricked into giving out the Exit flag to relays
that didn't allow exiting to any ports. This bug could screw
with load balancing and stats. Bugfix on 0.1.1.6-alpha; fixes bug
1238. Bug discovered by Martin Kowalczyk.
- If all authorities restart at once right before a consensus vote,
nobody will vote about "Running", and clients will get a consensus
with no usable relays. Instead, authorities refuse to build a
consensus if this happens. Bugfix on 0.2.0.10-alpha; fixes bug 1066.
o Major bugfixes (stream-level fairness):
- When receiving a circuit-level SENDME for a blocked circuit, try
to package cells fairly from all the streams that had previously
been blocked on that circuit. Previously, we had started with the
oldest stream, and allowed each stream to potentially exhaust
the circuit's package window. This gave older streams on any
given circuit priority over newer ones. Fixes bug 1937. Detected
originally by Camilo Viecco. This bug was introduced before the
first Tor release, in svn commit r152: it is the new winner of
the longest-lived bug prize.
- Fix a stream fairness bug that would cause newer streams on a given
circuit to get preference when reading bytes from the origin or
destination. Fixes bug 2210. Fix by Mashael AlSabah. This bug was
introduced before the first Tor release, in svn revision r152.
- When the exit relay got a circuit-level sendme cell, it started
reading on the exit streams, even if had 500 cells queued in the
circuit queue already, so the circuit queue just grew and grew in
some cases. We fix this by not re-enabling reading on receipt of a
sendme cell when the cell queue is blocked. Fixes bug 1653. Bugfix
on 0.2.0.1-alpha. Detected by Mashael AlSabah. Original patch by
"yetonetime".
- Newly created streams were allowed to read cells onto circuits,
even if the circuit's cell queue was blocked and waiting to drain.
This created potential unfairness, as older streams would be
blocked, but newer streams would gladly fill the queue completely.
We add code to detect this situation and prevent any stream from
getting more than one free cell. Bugfix on 0.2.0.1-alpha. Partially
fixes bug 1298.
o Major bugfixes (hidden services):
- Apply circuit timeouts to opened hidden-service-related circuits
based on the correct start time. Previously, we would apply the
circuit build timeout based on time since the circuit's creation;
it was supposed to be applied based on time since the circuit
entered its current state. Bugfix on 0.0.6; fixes part of bug 1297.
- Improve hidden service robustness: When we find that we have
extended a hidden service's introduction circuit to a relay not
listed as an introduction point in the HS descriptor we currently
have, retry with an introduction point from the current
descriptor. Previously we would just give up. Fixes bugs 1024 and
1930; bugfix on 0.2.0.10-alpha.
- Directory authorities now use data collected from their own
uptime observations when choosing whether to assign the HSDir flag
to relays, instead of trusting the uptime value the relay reports in
its descriptor. This change helps prevent an attack where a small
set of nodes with frequently-changing identity keys can blackhole
a hidden service. (Only authorities need upgrade; others will be
fine once they do.) Bugfix on 0.2.0.10-alpha; fixes bug 2709.
- Stop assigning the HSDir flag to relays that disable their
DirPort (and thus will refuse to answer directory requests). This
fix should dramatically improve the reachability of hidden services:
hidden services and hidden service clients pick six HSDir relays
to store and retrieve the hidden service descriptor, and currently
about half of the HSDir relays will refuse to work. Bugfix on
0.2.0.10-alpha; fixes part of bug 1693.
o Major bugfixes (misc):
- Clients now stop trying to use an exit node associated with a given
destination by TrackHostExits if they fail to reach that exit node.
Fixes bug 2999. Bugfix on 0.2.0.20-rc.
- Fix a regression that caused Tor to rebind its ports if it receives
SIGHUP while hibernating. Bugfix in 0.1.1.6-alpha; closes bug 919.
- Remove an extra pair of quotation marks around the error
message in control-port STATUS_GENERAL BUG events. Bugfix on
0.1.2.6-alpha; fixes bug 3732.
o Minor features (relays):
- Ensure that no empty [dirreq-](read|write)-history lines are added
to an extrainfo document. Implements ticket 2497.
- When bandwidth accounting is enabled, be more generous with how
much bandwidth we'll use up before entering "soft hibernation".
Previously, we'd refuse new connections and circuits once we'd
used up 95% of our allotment. Now, we use up 95% of our allotment,
AND make sure that we have no more than 500MB (or 3 hours of
expected traffic, whichever is lower) remaining before we enter
soft hibernation.
- Relays now log the reason for publishing a new relay descriptor,
so we have a better chance of hunting down instances of bug 1810.
Resolves ticket 3252.
- Log a little more clearly about the times at which we're no longer
accepting new connections (e.g. due to hibernating). Resolves
bug 2181.
- When AllowSingleHopExits is set, print a warning to explain to the
relay operator why most clients are avoiding her relay.
- Send END_STREAM_REASON_NOROUTE in response to EHOSTUNREACH errors.
Clients before 0.2.1.27 didn't handle NOROUTE correctly, but such
clients are already deprecated because of security bugs.
o Minor features (network statistics):
- Directory mirrors that set "DirReqStatistics 1" write statistics
about directory requests to disk every 24 hours. As compared to the
"--enable-geoip-stats" ./configure flag in 0.2.1.x, there are a few
improvements: 1) stats are written to disk exactly every 24 hours;
2) estimated shares of v2 and v3 requests are determined as mean
values, not at the end of a measurement period; 3) unresolved
requests are listed with country code '??'; 4) directories also
measure download times.
- Exit nodes that set "ExitPortStatistics 1" write statistics on the
number of exit streams and transferred bytes per port to disk every
24 hours.
- Relays that set "CellStatistics 1" write statistics on how long
cells spend in their circuit queues to disk every 24 hours.
- Entry nodes that set "EntryStatistics 1" write statistics on the
rough number and origins of connecting clients to disk every 24
hours.
- Relays that write any of the above statistics to disk and set
"ExtraInfoStatistics 1" include the past 24 hours of statistics in
their extra-info documents. Implements proposal 166.
o Minor features (GeoIP and statistics):
- Provide a log message stating which geoip file we're parsing
instead of just stating that we're parsing the geoip file.
Implements ticket 2432.
- Make sure every relay writes a state file at least every 12 hours.
Previously, a relay could go for weeks without writing its state
file, and on a crash could lose its bandwidth history, capacity
estimates, client country statistics, and so on. Addresses bug 3012.
- Relays report the number of bytes spent on answering directory
requests in extra-info descriptors similar to {read,write}-history.
Implements enhancement 1790.
- Report only the top 10 ports in exit-port stats in order not to
exceed the maximum extra-info descriptor length of 50 KB. Implements
task 2196.
- If writing the state file to disk fails, wait up to an hour before
retrying again, rather than trying again each second. Fixes bug
2346; bugfix on Tor 0.1.1.3-alpha.
- Delay geoip stats collection by bridges for 6 hours, not 2 hours,
when we switch from being a public relay to a bridge. Otherwise
there will still be clients that see the relay in their consensus,
and the stats will end up wrong. Bugfix on 0.2.1.15-rc; fixes
bug 932.
- Update to the August 2 2011 Maxmind GeoLite Country database.
o Minor features (clients):
- When expiring circuits, use microsecond timers rather than
one-second timers. This can avoid an unpleasant situation where a
circuit is launched near the end of one second and expired right
near the beginning of the next, and prevent fluctuations in circuit
timeout values.
- If we've configured EntryNodes and our network goes away and/or all
our entrynodes get marked down, optimistically retry them all when
a new socks application request appears. Fixes bug 1882.
- Always perform router selections using weighted relay bandwidth,
even if we don't need a high capacity circuit at the time. Non-fast
circuits now only differ from fast ones in that they can use relays
not marked with the Fast flag. This "feature" could turn out to
be a horrible bug; we should investigate more before it goes into
a stable release.
- When we run out of directory information such that we can't build
circuits, but then get enough that we can build circuits, log when
we actually construct a circuit, so the user has a better chance of
knowing what's going on. Fixes bug 1362.
- Log SSL state transitions at debug level during handshake, and
include SSL states in error messages. This may help debug future
SSL handshake issues.
o Minor features (directory authorities):
- When a router changes IP address or port, authorities now launch
a new reachability test for it. Implements ticket 1899.
- Directory authorities now reject relays running any versions of
Tor between 0.2.1.3-alpha and 0.2.1.18 inclusive; they have
known bugs that keep RELAY_EARLY cells from working on rendezvous
circuits. Followup to fix for bug 2081.
- Directory authorities now reject relays running any version of Tor
older than 0.2.0.26-rc. That version is the earliest that fetches
current directory information correctly. Fixes bug 2156.
- Directory authorities now do an immediate reachability check as soon
as they hear about a new relay. This change should slightly reduce
the time between setting up a relay and getting listed as running
in the consensus. It should also improve the time between setting
up a bridge and seeing use by bridge users.
- Directory authorities no longer launch a TLS connection to every
relay as they startup. Now that we have 2k+ descriptors cached,
the resulting network hiccup is becoming a burden. Besides,
authorities already avoid voting about Running for the first half
hour of their uptime.
- Directory authorities now log the source of a rejected POSTed v3
networkstatus vote, so we can track failures better.
- Backport code from 0.2.3.x that allows directory authorities to
clean their microdescriptor caches. Needed to resolve bug 2230.
o Minor features (hidden services):
- Use computed circuit-build timeouts to decide when to launch
parallel introduction circuits for hidden services. (Previously,
we would retry after 15 seconds.)
- Don't allow v0 hidden service authorities to act as clients.
Required by fix for bug 3000.
- Ignore SIGNAL NEWNYM commands on relay-only Tor instances. Required
by fix for bug 3000.
- Make hidden services work better in private Tor networks by not
requiring any uptime to join the hidden service descriptor
DHT. Implements ticket 2088.
- Log (at info level) when purging pieces of hidden-service-client
state because of SIGNAL NEWNYM.
o Minor features (controller interface):
- New "GETINFO net/listeners/(type)" controller command to return
a list of addresses and ports that are bound for listeners for a
given connection type. This is useful when the user has configured
"SocksPort auto" and the controller needs to know which port got
chosen. Resolves another part of ticket 3076.
- Have the controller interface give a more useful message than
"Internal Error" in response to failed GETINFO requests.
- Add a TIMEOUT_RATE keyword to the BUILDTIMEOUT_SET control port
event, to give information on the current rate of circuit timeouts
over our stored history.
- The 'EXTENDCIRCUIT' control port command can now be used with
a circ id of 0 and no path. This feature will cause Tor to build
a new 'fast' general purpose circuit using its own path selection