]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
fix non-fatal assertion when rotate_onion_key fails
authortrinity-1686a <trinity@deuxfleurs.fr>
Sun, 16 Jul 2023 20:29:23 +0000 (22:29 +0200)
committertrinity-1686a <trinity@deuxfleurs.fr>
Sun, 16 Jul 2023 20:29:23 +0000 (22:29 +0200)
src/feature/relay/relay_periodic.c
src/feature/relay/router.c
src/feature/relay/router.h

index dd9be4e36fc221752985458832474407d053843a..7661d00afc372d876425789d49e21899d8ce1751 100644 (file)
@@ -102,7 +102,9 @@ rotate_onion_key_callback(time_t now, const or_options_t *options)
     }
 
     log_info(LD_GENERAL,"Rotating onion key.");
-    rotate_onion_key();
+    if (!rotate_onion_key()) {
+      return ONION_KEY_CONSENSUS_CHECK_INTERVAL;
+    }
     cpuworkers_rotate_keyinfo();
     if (!router_rebuild_descriptor(1)) {
       log_info(LD_CONFIG, "Couldn't rebuild router descriptor");
index f5928127ea1da93783d07bed81f83db7d694e83f..1ed9630e09cd47a63867b4d645205b91f2cb05f3 100644 (file)
@@ -482,8 +482,10 @@ get_my_v3_legacy_signing_key(void)
  *   - schedule all previous cpuworkers to shut down _after_ processing
  *     pending work.  (This will cause fresh cpuworkers to be generated.)
  *   - generate and upload a fresh routerinfo.
+ *
+ * Return true on success, else false on error.
  */
-void
+bool
 rotate_onion_key(void)
 {
   char *fname, *fname_prev;
@@ -491,6 +493,7 @@ rotate_onion_key(void)
   or_state_t *state = get_or_state();
   curve25519_keypair_t new_curve25519_keypair;
   time_t now;
+  bool result = false;
   fname = get_keydir_fname("secret_onion_key");
   fname_prev = get_keydir_fname("secret_onion_key.old");
   /* There isn't much point replacing an old key with an empty file */
@@ -540,6 +543,7 @@ rotate_onion_key(void)
   tor_mutex_release(key_lock);
   mark_my_descriptor_dirty("rotated onion key");
   or_state_mark_dirty(state, get_options()->AvoidDiskWrites ? now+3600 : 0);
+  result = true;
   goto done;
  error:
   log_warn(LD_GENERAL, "Couldn't rotate onion key.");
@@ -549,6 +553,7 @@ rotate_onion_key(void)
   memwipe(&new_curve25519_keypair, 0, sizeof(new_curve25519_keypair));
   tor_free(fname);
   tor_free(fname_prev);
+  return result;
 }
 
 /** Log greeting message that points to new relay lifecycle document the
index b5b5a1fffafbb06ec4bc1e106b38d507e0f28bfb..f201fdbd63132ed96a415330118a6ae911179f79 100644 (file)
@@ -45,7 +45,7 @@ authority_cert_t *get_my_v3_legacy_cert(void);
 crypto_pk_t *get_my_v3_legacy_signing_key(void);
 void dup_onion_keys(crypto_pk_t **key, crypto_pk_t **last);
 void expire_old_onion_keys(void);
-void rotate_onion_key(void);
+bool rotate_onion_key(void);
 void v3_authority_check_key_expiry(void);
 int get_onion_key_lifetime(void);
 int get_onion_key_grace_period(void);