mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-27 22:03:31 +01:00
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.
This commit is contained in:
parent
441241c136
commit
213139f887
@ -405,6 +405,7 @@ crypto_free_pk_env(crypto_pk_env_t *env)
|
|||||||
|
|
||||||
if (--env->refs > 0)
|
if (--env->refs > 0)
|
||||||
return;
|
return;
|
||||||
|
tor_assert(env->refs == 0);
|
||||||
|
|
||||||
if (env->key)
|
if (env->key)
|
||||||
RSA_free(env->key);
|
RSA_free(env->key);
|
||||||
|
@ -573,7 +573,7 @@ init_keys(void)
|
|||||||
* otherwise, set the server identity key as our client identity
|
* otherwise, set the server identity key as our client identity
|
||||||
* key. */
|
* key. */
|
||||||
if (public_server_mode(options)) {
|
if (public_server_mode(options)) {
|
||||||
set_client_identity_key(prkey); /* set above */
|
set_client_identity_key(crypto_pk_dup_key(prkey)); /* set above */
|
||||||
} else {
|
} else {
|
||||||
if (!(prkey = crypto_new_pk_env()))
|
if (!(prkey = crypto_new_pk_env()))
|
||||||
return -1;
|
return -1;
|
||||||
|
Loading…
Reference in New Issue
Block a user