Commit 8fda94f9 authored by George Kadianakis's avatar George Kadianakis
Browse files

hs-v3: Move ob_subcreds to hs_service_state_t.

It's more natural there since it's runtime state.
parent 0667a5af
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -984,13 +984,13 @@ get_subcredential_for_handling_intro2_cell(const hs_service_t *service,

  /* This should not happen since we should have made onionbalance
   * subcredentials when we created our descriptors. */
  if (BUG(!service->ob_subcreds)) {
  if (BUG(!service->state.ob_subcreds)) {
    return -1;
  }

  /* We are an onionbalance instance: */
  data->n_subcredentials = service->n_ob_subcreds;
  data->subcredentials = service->ob_subcreds;
  data->n_subcredentials = service->state.n_ob_subcreds;
  data->subcredentials = service->state.ob_subcreds;

  return 0;
}
+4 −4
Original line number Diff line number Diff line
@@ -392,12 +392,12 @@ hs_ob_refresh_keys(hs_service_t *service)
  }

  /* Delete old subcredentials if any */
  if (service->ob_subcreds) {
    tor_free(service->ob_subcreds);
  if (service->state.ob_subcreds) {
    tor_free(service->state.ob_subcreds);
  }

  service->ob_subcreds = ob_subcreds;
  service->n_ob_subcreds = num_subcreds;
  service->state.ob_subcreds = ob_subcreds;
  service->state.n_ob_subcreds = num_subcreds;
}

/** Free any memory allocated by the onionblance subsystem. */
+6 −6
Original line number Diff line number Diff line
@@ -896,11 +896,11 @@ move_hs_state(hs_service_t *src_service, hs_service_t *dst_service)

  dst->next_rotation_time = src->next_rotation_time;

  if (src_service->ob_subcreds) {
    dst_service->ob_subcreds = src_service->ob_subcreds;
    dst_service->n_ob_subcreds =  src_service->n_ob_subcreds;
  if (src->ob_subcreds) {
    dst->ob_subcreds = src->ob_subcreds;
    dst->n_ob_subcreds =  src->n_ob_subcreds;

    src_service->ob_subcreds = NULL; /* steal pointer reference */
    src->ob_subcreds = NULL; /* steal pointer reference */
  }
}

@@ -4162,8 +4162,8 @@ hs_service_free_(hs_service_t *service)
  }

  /* Free onionbalance subcredentials (if any) */
  if (service->ob_subcreds) {
    tor_free(service->ob_subcreds);
  if (service->state.ob_subcreds) {
    tor_free(service->state.ob_subcreds);
  }

  /* Wipe service keys. */
+8 −8
Original line number Diff line number Diff line
@@ -279,6 +279,14 @@ typedef struct hs_service_state_t {
  /** When is the next time we should rotate our descriptors. This is has to be
   * done at the start time of the next SRV protocol run. */
  time_t next_rotation_time;

  /* If this is an onionbalance instance, this is an array of subcredentials
   * that should be used when decrypting an INTRO2 cell. If this is not an
   * onionbalance instance, this is NULL.
   * See [ONIONBALANCE] section in rend-spec-v3.txt for more details . */
  hs_subcredential_t *ob_subcreds;
  /* Number of OB subcredentials */
  size_t n_ob_subcreds;
} hs_service_state_t;

/** Representation of a service running on this tor instance. */
@@ -304,14 +312,6 @@ typedef struct hs_service_t {
  hs_service_descriptor_t *desc_current;
  /** Next descriptor. */
  hs_service_descriptor_t *desc_next;

  /* If this is an onionbalance instance, this is an array of subcredentials
   * that should be used when decrypting an INTRO2 cell. If this is not an
   * onionbalance instance, this is NULL.
   * See [ONIONBALANCE] section in rend-spec-v3.txt for more details . */
  hs_subcredential_t *ob_subcreds;
  /* Number of OB subcredentials */
  size_t n_ob_subcreds;
} hs_service_t;

/** For the service global hash map, we define a specific type for it which
+1 −1
Original line number Diff line number Diff line
@@ -2520,7 +2520,7 @@ test_intro2_handling(void *arg)
  /* Start cleaning up X */
  replaycache_free(x_service.state.replay_cache_rend_cookie);
  smartlist_free(x_service.config.ob_master_pubkeys);
  tor_free(x_service.ob_subcreds);
  tor_free(x_service.state.ob_subcreds);
  service_descriptor_free(x_service.desc_current);
  service_descriptor_free(x_service.desc_next);
  service_intro_point_free(x_ip);