diff --git a/src/core/or/circuitlist.c b/src/core/or/circuitlist.c index ee9e89f380..83c651ff17 100644 --- a/src/core/or/circuitlist.c +++ b/src/core/or/circuitlist.c @@ -133,7 +133,6 @@ static smartlist_t *circuits_pending_other_guards = NULL; * circuit_mark_for_close and which are waiting for circuit_about_to_free. */ static smartlist_t *circuits_pending_close = NULL; -static void circuit_free_cpath_node(crypt_path_t *victim); static void cpath_ref_decref(crypt_path_reference_t *cpath_ref); static void circuit_about_to_free_atexit(circuit_t *circ); static void circuit_about_to_free(circuit_t *circ); @@ -1333,22 +1332,6 @@ circuit_free_all(void) HT_CLEAR(chan_circid_map, &chan_circid_map); } -/** Deallocate space associated with the cpath node victim. */ -static void -circuit_free_cpath_node(crypt_path_t *victim) -{ - if (!victim) - return; - - relay_crypto_clear(&victim->crypto); - onion_handshake_state_release(&victim->handshake_state); - crypto_dh_free(victim->rend_dh_handshake_state); - extend_info_free(victim->extend_info); - - memwipe(victim, 0xBB, sizeof(crypt_path_t)); /* poison memory */ - tor_free(victim); -} - /** Release a crypt_path_reference_t*, which may be NULL. */ static void cpath_ref_decref(crypt_path_reference_t *cpath_ref) diff --git a/src/core/or/crypt_path.c b/src/core/or/crypt_path.c index 77f129eff3..54f5623d32 100644 --- a/src/core/or/crypt_path.c +++ b/src/core/or/crypt_path.c @@ -16,9 +16,13 @@ #include "core/or/crypt_path.h" #include "core/crypto/relay_crypto.h" +#include "core/crypto/onion_crypto.h" #include "core/or/circuitbuild.h" #include "core/or/circuitlist.h" +#include "lib/crypt_ops/crypto_dh.h" +#include "lib/crypt_ops/crypto_util.h" + #include "core/or/crypt_path_st.h" #include "core/or/cell_st.h" @@ -143,6 +147,21 @@ circuit_init_cpath_crypto(crypt_path_t *cpath, } +/** Deallocate space associated with the cpath node victim. */ +void +circuit_free_cpath_node(crypt_path_t *victim) +{ + if (!victim) + return; + + relay_crypto_clear(&victim->private->crypto); + onion_handshake_state_release(&victim->handshake_state); + crypto_dh_free(victim->rend_dh_handshake_state); + extend_info_free(victim->extend_info); + + memwipe(victim, 0xBB, sizeof(crypt_path_t)); /* poison memory */ + tor_free(victim); +} /********************** cpath crypto API *******************************/ diff --git a/src/core/or/crypt_path.h b/src/core/or/crypt_path.h index a7ebe604f5..e8455c6326 100644 --- a/src/core/or/crypt_path.h +++ b/src/core/or/crypt_path.h @@ -16,6 +16,9 @@ int circuit_init_cpath_crypto(crypt_path_t *cpath, const char *key_data, size_t key_data_len, int reverse, int is_hs_v3); +void +circuit_free_cpath_node(crypt_path_t *victim); + /* rename */ void onion_append_to_cpath(crypt_path_t **head_ptr, crypt_path_t *new_hop);