diff options
author | Sebastian Hahn <sebastian@torproject.org> | 2010-10-26 18:22:04 +0200 |
---|---|---|
committer | Sebastian Hahn <sebastian@torproject.org> | 2011-10-26 14:17:01 +0200 |
commit | 3a890b3b70d53ac864be682f50f07ba07b8f09ba (patch) | |
tree | e04afdca93d423da2e0964cb5af0efbcc2d5c987 | |
parent | dc557e8164003d6c09b620333902d7dae3762794 (diff) | |
download | tor-3a890b3b70d53ac864be682f50f07ba07b8f09ba.tar.gz tor-3a890b3b70d53ac864be682f50f07ba07b8f09ba.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.
-rw-r--r-- | src/common/crypto.c | 1 | ||||
-rw-r--r-- | src/or/router.c | 2 |
2 files changed, 2 insertions, 1 deletions
diff --git a/src/common/crypto.c b/src/common/crypto.c index c723c33dd0..a444cf126a 100644 --- a/src/common/crypto.c +++ b/src/common/crypto.c @@ -326,6 +326,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 96aca88376..c471599cb6 100644 --- a/src/or/router.c +++ b/src/or/router.c @@ -559,7 +559,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; |