Commit 66e76066 authored by David Goulet's avatar David Goulet 🐼 Committed by Nick Mathewson
Browse files

hs-v3: Build onion address before registering ephemeral service



With the work on #25500 (reducing CPU client usage), the HS service main loop
callback is enabled as soon as the HS service map changes which happens when
registering a new service.

Unfortunately, for an ephemeral service, we were building the onion address
*after* the registration leading to the "service->onion_address` to be an
empty string.

This broke the "HS_DESC CREATED" event which had no onion address in it. And
also, we were logging an empty onion address for that service.

Fixes #25939

Signed-off-by: David Goulet's avatarDavid Goulet <dgoulet@torproject.org>
parent 36a10785
Loading
Loading
Loading
Loading

changes/bug25939

0 → 100644
+3 −0
Original line number Diff line number Diff line
  o Minor bugfixes (onion services):
    - Fix a bug that blocked the creation of ephemeral v3 onion services. Fixes
      bug 25939; bugfix on 0.3.4.1-alpha.
+8 −6
Original line number Diff line number Diff line
@@ -3062,6 +3062,12 @@ hs_service_add_ephemeral(ed25519_secret_key_t *sk, smartlist_t *ports,
    goto err;
  }

  /* Build the onion address for logging purposes but also the control port
   * uses it for the HS_DESC event. */
  hs_build_address(&service->keys.identity_pk,
                   (uint8_t) service->config.version,
                   service->onion_address);

  /* The only way the registration can fail is if the service public key
   * already exists. */
  if (BUG(register_service(hs_service_map, service) < 0)) {
@@ -3071,14 +3077,10 @@ hs_service_add_ephemeral(ed25519_secret_key_t *sk, smartlist_t *ports,
    goto err;
  }

  /* Last step is to build the onion address. */
  hs_build_address(&service->keys.identity_pk,
                   (uint8_t) service->config.version,
                   service->onion_address);
  *address_out = tor_strdup(service->onion_address);

  log_info(LD_CONFIG, "Added ephemeral v3 onion service: %s",
           safe_str_client(service->onion_address));

  *address_out = tor_strdup(service->onion_address);
  ret = RSAE_OKAY;
  goto end;