From: Micah Elizabeth Scott Date: Mon, 27 Feb 2023 21:11:49 +0000 (-0800) Subject: hs_pow: check for expired params in can_client_refetch_desc X-Git-Tag: tor-0.4.8.1-alpha~76 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a0b9f3546eeead024b480cd19eed108fc3e8970a;p=thirdparty%2Ftor.git hs_pow: check for expired params in can_client_refetch_desc Without this check, we never actually refetch the hs descriptor when PoW parameters expire, because can_client_refetch_desc deems the descriptor to be still good. Signed-off-by: Micah Elizabeth Scott --- diff --git a/src/feature/hs/hs_client.c b/src/feature/hs/hs_client.c index 038f76c5b8..56547de7e7 100644 --- a/src/feature/hs/hs_client.c +++ b/src/feature/hs/hs_client.c @@ -1451,9 +1451,20 @@ can_client_refetch_desc(const ed25519_public_key_t *identity_pk, /* Check if fetching a desc for this HS is useful to us right now */ { const hs_descriptor_t *cached_desc = NULL; + int has_usable_intro = false; + int has_expired_hs_pow = false; + cached_desc = hs_cache_lookup_as_client(identity_pk); - if (cached_desc && hs_client_any_intro_points_usable(identity_pk, - cached_desc)) { + if (cached_desc) { + has_usable_intro = hs_client_any_intro_points_usable(identity_pk, + cached_desc); + if (cached_desc->encrypted_data.pow_params) { + has_expired_hs_pow = + cached_desc->encrypted_data.pow_params->expiration_time < + approx_time(); + } + } + if (has_usable_intro && !has_expired_hs_pow) { log_info(LD_GENERAL, "We would fetch a v3 hidden service descriptor " "but we already have a usable descriptor."); status = HS_CLIENT_FETCH_HAVE_DESC;