]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Notice a little faster if we're running out of virtual addresses
authorNick Mathewson <nickm@torproject.org>
Thu, 6 Jan 2011 18:29:36 +0000 (13:29 -0500)
committerNick Mathewson <nickm@torproject.org>
Thu, 6 Jan 2011 18:29:36 +0000 (13:29 -0500)
We were not decrementing "available" every time we did
++next_virtual_addr in addressmap_get_virtual_address: we left out the
--available when we skipped .00 and .255 addresses.

This didn't actually cause a bug in most cases, since the failure mode
was to keep looping around the virtual addresses until we found one,
or until available hit zero.  It could have given you an infinite loop
rather than a useful message, however, if you said "VirtualAddrNetwork
127.0.0.255/32" or something broken like that.

Spotted by cypherpunks

src/or/connection_edge.c

index a01a6e38a11f75ee7e6c99f4b2125f6088cdced2..001408a79e9f9c79b15c652beb0b15fad465d9ba 100644 (file)
@@ -1169,6 +1169,10 @@ addressmap_get_virtual_address(int type)
       while ((next_virtual_addr & 0xff) == 0 ||
              (next_virtual_addr & 0xff) == 0xff) {
         ++next_virtual_addr;
+        if (! --available) {
+          log_warn(LD_CONFIG, "Ran out of virtual addresses!");
+          return NULL;
+        }
       }
       in.s_addr = htonl(next_virtual_addr);
       tor_inet_ntoa(&in, buf, sizeof(buf));