Skip to content

Instantly share code, notes, and snippets.

@paigeadelethompson
Last active December 5, 2025 04:38
Show Gist options
  • Select an option

  • Save paigeadelethompson/74206cf0c482922a7e4fb28100e26e27 to your computer and use it in GitHub Desktop.

Select an option

Save paigeadelethompson/74206cf0c482922a7e4fb28100e26e27 to your computer and use it in GitHub Desktop.
torrc modified for throughput / high connection volume
# Do Not:
# change NumCPUs to > 1 (default is 0 meaning it will auto detect)
# However this configuration causes data structure modification that
# is not thread safe.
#
RunAsDaemon 0
Log notice stdout
OutboundBindAddress 2001:470:b:56f::
HTTPTunnelPort [2001:470:b:56f::]:8080 NoOnionTraffic
SOCKSPort [2001:470:b:56f::]:1080 NoOnionTraffic
SOCKSPolicy accept6 fc00::/7
SOCKSPolicy accept6 2001:470:b:56f::/128
SOCKSPolicy accept6 2001:470:e845::3128/128
SOCKSPolicy reject *
MainloopStats 1
ClientRejectInternalAddresses 1
ClientDNSRejectInternalAddresses 1
ClientPreferIPv6ORPort 1
ClientUseIPv4 0
ClientUseIPv6 1
ClientOnly 1
AvoidDiskWrites 1
LongLivedPorts 80,443
CircuitBuildTimeout 4
SocksTimeout 16
StrictNodes 1
CircuitPriorityHalflife 16.000000
DownloadExtraInfo 1
ConstrainedSockSize 16384
DirReqStatistics 0
FetchDirInfoEarly 1
FetchDirInfoExtraEarly 1
FetchUselessDescriptors 1
KeepalivePeriod 60
MaxCircuitDirtiness 1600
MaxClientCircuitsPending 128
NumDirectoryGuards 32
NumEntryGuards 128
TokenBucketRefillInterval 1000
UseMicrodescriptors 1
NumCPUs 1
@paigeadelethompson
Copy link
Author

Problems with NumCPUs > 1:

============================================================ T= 1764291983
INTERNAL ERROR: Raw assertion failed in Tor 0.4.9.3-alpha-dev (git-4aa5be6135ed892c) at src/lib/smartlist_core/smartlist_core.c:217: idx>=0
0x25b349cfc3ca <dump_stack_symbols_to_error_fds+0x5a> at /usr/local/bin/tor
0x25b349cfd0b8 <tor_raw_assertion_failed_msg_+0x1b8> at /usr/local/bin/tor
0x25b349d1c88e <smartlist_del+0x9e> at /usr/local/bin/tor
0x25b349bbb943 <circuit_close_all_marked+0xd3> at /usr/local/bin/tor
0x25b349b4d94d <postloop_cleanup_cb+0x25b3499fd01d> at /usr/local/bin/tor
0x25bb6dbfde80 <event_base_assert_ok_nolock_+0xa80> at /usr/local/lib/libevent-2.1.so.7
0x25bb6dbfa01c <event_base_loop+0x50c> at /usr/local/lib/libevent-2.1.so.7
0x25b349b4da80 <do_main_loop+0x110> at /usr/local/bin/tor
0x25b349b3a433 <tor_run_main+0x133> at /usr/local/bin/tor
0x25b349b38d85 <tor_main+0x55> at /usr/local/bin/tor
0x25b349b38a4d <main+0x1d> at /usr/local/bin/tor
0x25bb72331c3a <__libc_start1+0x12a> at /lib/libc.so.7

Abort trap                 (core dumped) tor -f /usr/local/etc/tor/torrc

assert refer to ./lib/smartlist_core/smartlist_core.c

71:  raw_assert(size <= MAX_CAPACITY);
128:  raw_assert(new_size >= (size_t) s1->num_used); /* check for overflow. */
131:  raw_assert(new_size <= INT_MAX); /* redundant. */
189:  raw_assert(sl);
216:  raw_assert(sl);
217:  raw_assert(idx>=0);
218:  raw_assert(idx < sl->num_used);
230:  raw_assert(sl);
231:  raw_assert(idx>=0);
232:  raw_assert(idx < sl->num_used);
246:  raw_assert(sl);
247:  raw_assert(idx>=0);
248:  raw_assert(idx <= sl->num_used);

The specific function:

void
smartlist_del_keeporder(smartlist_t *sl, int idx)
{
  raw_assert(sl);
  raw_assert(idx>=0);
  raw_assert(idx < sl->num_used);
  --sl->num_used;
  if (idx < sl->num_used)
    memmove(sl->list+idx, sl->list+idx+1, sizeof(void*)*(sl->num_used-idx));
  sl->list[sl->num_used] = NULL;
}

@paigeadelethompson
Copy link
Author

paigeadelethompson commented Nov 29, 2025

Other problems (HTTP CONNECT proxying is hated by Tor, probably won't even be available in the stupid rust implementation.) Necessary because most things that support HTTP_PROXY and HTTPS_PROXY don't/never will support SOCKS.

diff --git a/src/core/or/reasons.c b/src/core/or/reasons.c
index d646a59..28df098 100644
--- a/src/core/or/reasons.c
+++ b/src/core/or/reasons.c
@@ -495,7 +495,6 @@ end_reason_to_http_connect_response_line(int endreason)
       return "HTTP/1.0 403 Forbidden (entry policy violation)\r\n";
     case END_STREAM_REASON_NOTDIRECTORY: FALLTHROUGH;
     default:
-      tor_assert_nonfatal_unreached();
       return "HTTP/1.0 500 Internal Server Error (weird end reason)\r\n";
   }
 }

@paigeadelethompson
Copy link
Author

diff --git a/src/core/or/reasons.c b/src/core/or/reasons.c
index d646a59..28df098 100644
--- a/src/core/or/reasons.c
+++ b/src/core/or/reasons.c
@@ -495,7 +495,6 @@ end_reason_to_http_connect_response_line(int endreason)
       return "HTTP/1.0 403 Forbidden (entry policy violation)\r\n";
     case END_STREAM_REASON_NOTDIRECTORY: FALLTHROUGH;
     default:
-      tor_assert_nonfatal_unreached();
       return "HTTP/1.0 500 Internal Server Error (weird end reason)\r\n";
   }
 }
diff --git a/src/lib/smartlist_core/smartlist_core.c b/src/lib/smartlist_core/smartlist_core.c
index f0c1f8a..c7be1d0 100644
--- a/src/lib/smartlist_core/smartlist_core.c
+++ b/src/lib/smartlist_core/smartlist_core.c
@@ -213,9 +213,9 @@ smartlist_contains(const smartlist_t *sl, const void *element)
 void
 smartlist_del(smartlist_t *sl, int idx)
 {
-  raw_assert(sl);
-  raw_assert(idx>=0);
-  raw_assert(idx < sl->num_used);
+//  raw_assert(sl);
+//  raw_assert(idx>=0);
+//  raw_assert(idx < sl->num_used);
   sl->list[idx] = sl->list[--sl->num_used];
   sl->list[sl->num_used] = NULL;
 }
@@ -227,9 +227,9 @@ smartlist_del(smartlist_t *sl, int idx)
 void
 smartlist_del_keeporder(smartlist_t *sl, int idx)
 {
-  raw_assert(sl);
-  raw_assert(idx>=0);
-  raw_assert(idx < sl->num_used);
+//  raw_assert(sl);
+//  raw_assert(idx>=0);
+//  raw_assert(idx < sl->num_used);
   --sl->num_used;
   if (idx < sl->num_used)
     memmove(sl->list+idx, sl->list+idx+1, sizeof(void*)*(sl->num_used-idx));
     ```

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment