Validate intro point limits to avoid asserts.

This commit is contained in:
George Kadianakis 2017-08-03 15:49:42 +03:00 committed by Nick Mathewson
parent 7c507a1f7f
commit 3bc52dae89

View File

@ -346,12 +346,25 @@ service_intro_point_new(const extend_info_t *ei, unsigned int is_legacy)
* term keys. */ * term keys. */
ed25519_keypair_generate(&ip->auth_key_kp, 0); ed25519_keypair_generate(&ip->auth_key_kp, 0);
ip->introduce2_max = { /* Set introduce2 max cells limit */
crypto_rand_int_range(get_intro_point_min_introduce2(), int32_t min_introduce2_cells = get_intro_point_min_introduce2();
get_intro_point_max_introduce2()); int32_t max_introduce2_cells = get_intro_point_max_introduce2();
ip->time_to_expire = time(NULL) + if (BUG(max_introduce2_cells < min_introduce2_cells)) {
crypto_rand_int_range(get_intro_point_min_lifetime(), goto err;
get_intro_point_max_lifetime()); }
ip->introduce2_max = crypto_rand_int_range(min_introduce2_cells,
max_introduce2_cells);
}
{ /* Set intro point lifetime */
int32_t intro_point_min_lifetime = get_intro_point_min_lifetime();
int32_t intro_point_max_lifetime = get_intro_point_max_lifetime();
if (BUG(intro_point_max_lifetime < intro_point_min_lifetime)) {
goto err;
}
ip->time_to_expire = time(NULL) +
crypto_rand_int_range(intro_point_min_lifetime,intro_point_max_lifetime);
}
ip->replay_cache = replaycache_new(0, 0); ip->replay_cache = replaycache_new(0, 0);
/* Initialize the base object. We don't need the certificate object. */ /* Initialize the base object. We don't need the certificate object. */