]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
hs_pow: check for expired params in can_client_refetch_desc
authorMicah Elizabeth Scott <beth@torproject.org>
Mon, 27 Feb 2023 21:11:49 +0000 (13:11 -0800)
committerMicah Elizabeth Scott <beth@torproject.org>
Wed, 10 May 2023 14:38:28 +0000 (07:38 -0700)
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 <beth@torproject.org>
src/feature/hs/hs_client.c

index 038f76c5b834fd18f98881ae2565192624bad722..56547de7e7ec9c4b8d9c87d2fb03ff5dbb7209fe 100644 (file)
@@ -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;