diff options
author | David Goulet <dgoulet@ev0ke.net> | 2015-12-08 13:42:27 -0500 |
---|---|---|
committer | David Goulet <dgoulet@ev0ke.net> | 2015-12-08 15:57:12 -0500 |
commit | 4a7964b3bcfa5439ba10e227c2ca8a4564123538 (patch) | |
tree | ab278a1bb2a399c97c76cef979c675c53c0b4f5b /src/or/circuitbuild.c | |
parent | b701b7962b256ad7c4c43ad191a8ee094613af11 (diff) | |
download | tor-4a7964b3bcfa5439ba10e227c2ca8a4564123538.tar.gz tor-4a7964b3bcfa5439ba10e227c2ca8a4564123538.zip |
Don't allow a rendezvous point to have a private address
When an HS process an INTRODUCE2 cell, we didn't validate if the IP address
of the rendezvous point was a local address. If it's the case, we end up
wasting resources by trying to extend to a local address which fails since
we do not allow that in circuit_extend().
This commit now rejects a rendezvous point that has a local address once
seen at the hidden service side unless ExtendAllowPrivateAddresses is set.
Fixes #8976
Signed-off-by: David Goulet <dgoulet@ev0ke.net>
Diffstat (limited to 'src/or/circuitbuild.c')
-rw-r--r-- | src/or/circuitbuild.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c index 0688398f6d..6a3c16497e 100644 --- a/src/or/circuitbuild.c +++ b/src/or/circuitbuild.c @@ -2403,3 +2403,18 @@ build_state_get_exit_nickname(cpath_build_state_t *state) return state->chosen_exit->nickname; } +/** Return true iff the given address can be used to extend to. */ +int extend_info_addr_is_allowed(const tor_addr_t *addr) +{ + tor_assert(addr); + + /* Check if we have a private address and if we can extend to it. */ + if (tor_addr_is_internal(addr, 0) && + !get_options()->ExtendAllowPrivateAddresses) { + goto disallow; + } + /* Allowed! */ + return 1; + disallow: + return 0; +} |