Loading ChangeLog +3 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,9 @@ Changes in version 0.2.0.33 - 200?-??-?? - Fix a memory leak when we decline to add a v2 rendezvous descriptor to the cache because we already had a v0 descriptor with the same ID. Bugfix on 0.2.0.18-alpha. - Fix a race condition when freeing keys shared between main thread and CPU workers that could result in a memory leak. Bugfix on 0.1.0.1-rc. Fixes bug 889. o Minor features: - Report the case where all signatures in a detached set are rejected Loading src/common/crypto.c +17 −0 Original line number Diff line number Diff line Loading @@ -631,6 +631,23 @@ crypto_pk_dup_key(crypto_pk_env_t *env) return env; } /** Make a real honest-to-goodness copy of <b>env</b>, and return it. */ crypto_pk_env_t * crypto_pk_copy_full(crypto_pk_env_t *env) { RSA *new_key; tor_assert(env); tor_assert(env->key); if (PRIVATE_KEY_OK(env)) { new_key = RSAPrivateKey_dup(env->key); } else { new_key = RSAPublicKey_dup(env->key); } return _crypto_new_pk_env_rsa(new_key); } /** Encrypt <b>fromlen</b> bytes from <b>from</b> with the public key * in <b>env</b>, using the padding method <b>padding</b>. On success, * write the result to <b>to</b>, and return the number of bytes Loading src/common/crypto.h +1 −0 Original line number Diff line number Diff line Loading @@ -88,6 +88,7 @@ int crypto_pk_check_key(crypto_pk_env_t *env); int crypto_pk_cmp_keys(crypto_pk_env_t *a, crypto_pk_env_t *b); size_t crypto_pk_keysize(crypto_pk_env_t *env); crypto_pk_env_t *crypto_pk_dup_key(crypto_pk_env_t *orig); crypto_pk_env_t *crypto_pk_copy_full(crypto_pk_env_t *orig); int crypto_pk_public_encrypt(crypto_pk_env_t *env, char *to, const char *from, size_t fromlen, int padding); Loading src/or/router.c +4 −4 Original line number Diff line number Diff line Loading @@ -75,8 +75,8 @@ get_onion_key(void) return onionkey; } /** Store a copy of the current onion key into *<b>key</b>, and a copy * of the most recent onion key into *<b>last</b>. /** Store a full copy of the current onion key into *<b>key</b>, and a full * copy of the most recent onion key into *<b>last</b>. */ void dup_onion_keys(crypto_pk_env_t **key, crypto_pk_env_t **last) Loading @@ -85,9 +85,9 @@ dup_onion_keys(crypto_pk_env_t **key, crypto_pk_env_t **last) tor_assert(last); tor_mutex_acquire(key_lock); tor_assert(onionkey); *key = crypto_pk_dup_key(onionkey); *key = crypto_pk_copy_full(onionkey); if (lastonionkey) *last = crypto_pk_dup_key(lastonionkey); *last = crypto_pk_copy_full(lastonionkey); else *last = NULL; tor_mutex_release(key_lock); Loading Loading
ChangeLog +3 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,9 @@ Changes in version 0.2.0.33 - 200?-??-?? - Fix a memory leak when we decline to add a v2 rendezvous descriptor to the cache because we already had a v0 descriptor with the same ID. Bugfix on 0.2.0.18-alpha. - Fix a race condition when freeing keys shared between main thread and CPU workers that could result in a memory leak. Bugfix on 0.1.0.1-rc. Fixes bug 889. o Minor features: - Report the case where all signatures in a detached set are rejected Loading
src/common/crypto.c +17 −0 Original line number Diff line number Diff line Loading @@ -631,6 +631,23 @@ crypto_pk_dup_key(crypto_pk_env_t *env) return env; } /** Make a real honest-to-goodness copy of <b>env</b>, and return it. */ crypto_pk_env_t * crypto_pk_copy_full(crypto_pk_env_t *env) { RSA *new_key; tor_assert(env); tor_assert(env->key); if (PRIVATE_KEY_OK(env)) { new_key = RSAPrivateKey_dup(env->key); } else { new_key = RSAPublicKey_dup(env->key); } return _crypto_new_pk_env_rsa(new_key); } /** Encrypt <b>fromlen</b> bytes from <b>from</b> with the public key * in <b>env</b>, using the padding method <b>padding</b>. On success, * write the result to <b>to</b>, and return the number of bytes Loading
src/common/crypto.h +1 −0 Original line number Diff line number Diff line Loading @@ -88,6 +88,7 @@ int crypto_pk_check_key(crypto_pk_env_t *env); int crypto_pk_cmp_keys(crypto_pk_env_t *a, crypto_pk_env_t *b); size_t crypto_pk_keysize(crypto_pk_env_t *env); crypto_pk_env_t *crypto_pk_dup_key(crypto_pk_env_t *orig); crypto_pk_env_t *crypto_pk_copy_full(crypto_pk_env_t *orig); int crypto_pk_public_encrypt(crypto_pk_env_t *env, char *to, const char *from, size_t fromlen, int padding); Loading
src/or/router.c +4 −4 Original line number Diff line number Diff line Loading @@ -75,8 +75,8 @@ get_onion_key(void) return onionkey; } /** Store a copy of the current onion key into *<b>key</b>, and a copy * of the most recent onion key into *<b>last</b>. /** Store a full copy of the current onion key into *<b>key</b>, and a full * copy of the most recent onion key into *<b>last</b>. */ void dup_onion_keys(crypto_pk_env_t **key, crypto_pk_env_t **last) Loading @@ -85,9 +85,9 @@ dup_onion_keys(crypto_pk_env_t **key, crypto_pk_env_t **last) tor_assert(last); tor_mutex_acquire(key_lock); tor_assert(onionkey); *key = crypto_pk_dup_key(onionkey); *key = crypto_pk_copy_full(onionkey); if (lastonionkey) *last = crypto_pk_dup_key(lastonionkey); *last = crypto_pk_copy_full(lastonionkey); else *last = NULL; tor_mutex_release(key_lock); Loading