mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-28 06:13:31 +01:00
Make it easier for dmalloc to see if keys are leaking; remove a test-only key leak.
svn:r16965
This commit is contained in:
parent
06f96363fd
commit
b2c7090da6
@ -47,6 +47,7 @@ const char tor_svn_revision[] = "";
|
|||||||
|
|
||||||
#ifdef USE_DMALLOC
|
#ifdef USE_DMALLOC
|
||||||
#include <dmalloc.h>
|
#include <dmalloc.h>
|
||||||
|
#include <openssl/crypto.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int have_failed = 0;
|
int have_failed = 0;
|
||||||
@ -105,16 +106,28 @@ remove_directory(void)
|
|||||||
rmdir(temp_dir);
|
rmdir(temp_dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static crypto_pk_env_t *pregen_keys[5] = {NULL, NULL, NULL, NULL, NULL};
|
||||||
static crypto_pk_env_t *
|
static crypto_pk_env_t *
|
||||||
pk_generate(int idx)
|
pk_generate(int idx)
|
||||||
{
|
{
|
||||||
static crypto_pk_env_t *pregen[5] = {NULL, NULL, NULL, NULL, NULL};
|
tor_assert(idx < (int)(sizeof(pregen_keys)/sizeof(pregen_keys[0])));
|
||||||
tor_assert(idx < (int)(sizeof(pregen)/sizeof(pregen[0])));
|
if (! pregen_keys[idx]) {
|
||||||
if (! pregen[idx]) {
|
pregen_keys[idx] = crypto_new_pk_env();
|
||||||
pregen[idx] = crypto_new_pk_env();
|
tor_assert(!crypto_pk_generate_key(pregen_keys[idx]));
|
||||||
tor_assert(!crypto_pk_generate_key(pregen[idx]));
|
}
|
||||||
|
return crypto_pk_dup_key(pregen_keys[idx]);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
free_pregenerated_keys(void)
|
||||||
|
{
|
||||||
|
unsigned idx;
|
||||||
|
for (idx = 0; idx < sizeof(pregen_keys)/sizeof(pregen_keys[0]); ++idx) {
|
||||||
|
if (pregen_keys[idx]) {
|
||||||
|
crypto_free_pk_env(pregen_keys[idx]);
|
||||||
|
pregen_keys[idx] = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return crypto_pk_dup_key(pregen[idx]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -4405,12 +4418,20 @@ syntax(void)
|
|||||||
int
|
int
|
||||||
main(int c, char**v)
|
main(int c, char**v)
|
||||||
{
|
{
|
||||||
or_options_t *options = options_new();
|
or_options_t *options;
|
||||||
char *errmsg = NULL;
|
char *errmsg = NULL;
|
||||||
int i;
|
int i;
|
||||||
int verbose = 0, any_selected = 0;
|
int verbose = 0, any_selected = 0;
|
||||||
int loglevel = LOG_ERR;
|
int loglevel = LOG_ERR;
|
||||||
|
|
||||||
|
#ifdef USE_DMALLOC
|
||||||
|
{
|
||||||
|
int r = CRYPTO_set_mem_ex_functions(_tor_malloc, _tor_realloc, _tor_free);
|
||||||
|
tor_assert(r);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
options = options_new();
|
||||||
tor_threads_init();
|
tor_threads_init();
|
||||||
init_logging();
|
init_logging();
|
||||||
|
|
||||||
@ -4501,6 +4522,7 @@ main(int c, char**v)
|
|||||||
}
|
}
|
||||||
puts("");
|
puts("");
|
||||||
|
|
||||||
|
free_pregenerated_keys();
|
||||||
#ifdef USE_DMALLOC
|
#ifdef USE_DMALLOC
|
||||||
tor_free_all(0);
|
tor_free_all(0);
|
||||||
dmalloc_log_unfreed();
|
dmalloc_log_unfreed();
|
||||||
|
Loading…
Reference in New Issue
Block a user