Commit 274b25de authored by Robert Ransom's avatar Robert Ransom
Browse files

Don't launch a useless circuit in rend_client_reextend_intro_circuit

Fixes bug 4212.  Bug reported by katmagic and found by Sebastian.
parent f37d24c5
Loading
Loading
Loading
Loading

changes/bug4212

0 → 100644
+13 −0
Original line number Diff line number Diff line
  o Major bugfixes:

    - Don't launch a useless circuit after failing to use one of a
      hidden service's introduction points.  Previously, we would
      launch a new introduction circuit, but not set the hidden
      service which that circuit was intended to connect to, so it
      would never actually be used.  A different piece of code would
      then create a new introduction circuit correctly, so this bug
      was harmless until it caused an assertion in the client-side
      part of the #3825 fix to fail.  Bug reported by katmagic and
      found by Sebastian Hahn.  Bugfix on 0.2.1.13-alpha; fixes bug
      4212.
+4 −10
Original line number Diff line number Diff line
@@ -106,18 +106,12 @@ rend_client_reextend_intro_circuit(origin_circuit_t *circ)
    result = circuit_extend_to_new_exit(circ, extend_info);
  } else {
    log_info(LD_REND,
             "Building a new introduction circuit, this time to %s.",
             safe_str_client(extend_info_describe(extend_info)));
             "Closing intro circ %d (out of RELAY_EARLY cells).",
             circ->_base.n_circ_id);
    circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_FINISHED);
    if (!circuit_launch_by_extend_info(CIRCUIT_PURPOSE_C_INTRODUCING,
                                       extend_info,
                                       CIRCLAUNCH_IS_INTERNAL)) {
      log_warn(LD_REND, "Building introduction circuit failed.");
      result = -1;
    } else {
    /* connection_ap_handshake_attach_circuit will launch a new intro circ. */
    result = 0;
  }
  }
  extend_info_free(extend_info);
  return result;
}