summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSebastian Hahn <sebastian@torproject.org>2010-10-26 18:22:04 +0200
committerSebastian Hahn <sebastian@torproject.org>2010-10-26 18:22:04 +0200
commit213139f887edd5f366108e72d77c33bcfa3f8ba9 (patch)
treec53f0737feb427c77cedfca2d8b66f48cea11425 /src
parent441241c13692051ff1b4ae86eaf472a8782cd5d6 (diff)
downloadtor-213139f887edd5f366108e72d77c33bcfa3f8ba9.tar.gz
tor-213139f887edd5f366108e72d77c33bcfa3f8ba9.zip
Properly refcount client_identity_key
In a2bb0bf we started using a separate client identity key. When we are in "public server mode" (that means not a bridge) we will use the same key. Reusing the key without doing the proper refcounting leads to a segfault on cleanup during shutdown. Fix that. Also introduce an assert that triggers if our refcount falls below 0. That should never happen.
Diffstat (limited to 'src')
-rw-r--r--src/common/crypto.c1
-rw-r--r--src/or/router.c2
2 files changed, 2 insertions, 1 deletions
diff --git a/src/common/crypto.c b/src/common/crypto.c
index bfb81d3ccd..b49547fa4d 100644
--- a/src/common/crypto.c
+++ b/src/common/crypto.c
@@ -405,6 +405,7 @@ crypto_free_pk_env(crypto_pk_env_t *env)
if (--env->refs > 0)
return;
+ tor_assert(env->refs == 0);
if (env->key)
RSA_free(env->key);
diff --git a/src/or/router.c b/src/or/router.c
index 3fd7b7fc39..725a515e0c 100644
--- a/src/or/router.c
+++ b/src/or/router.c
@@ -573,7 +573,7 @@ init_keys(void)
* otherwise, set the server identity key as our client identity
* key. */
if (public_server_mode(options)) {
- set_client_identity_key(prkey); /* set above */
+ set_client_identity_key(crypto_pk_dup_key(prkey)); /* set above */
} else {
if (!(prkey = crypto_new_pk_env()))
return -1;