Loading changes/ticket28970 0 → 100644 +6 −0 Original line number Diff line number Diff line o Minor bugfixes (clietn, hidden service v3): - Fix a BUG() assertion that occurs within a very small race window between a client intro circuit opens and its descriptor that gets cleaned up from the cache. The circuit is now closed which will trigger a re-fetch of the descriptor and continue the HS connection. Fixes bug 28970; bugfix on 0.3.2.1-alpha. src/feature/hs/hs_client.c +6 −2 Original line number Diff line number Diff line Loading @@ -682,8 +682,12 @@ setup_intro_circ_auth_key(origin_circuit_t *circ) tor_assert(circ); desc = hs_cache_lookup_as_client(&circ->hs_ident->identity_pk); if (BUG(desc == NULL)) { /* Opening intro circuit without the descriptor is no good... */ if (desc == NULL) { /* There is a very small race window between the opening of this circuit * and the client descriptor cache that gets purged (NEWNYM) or the * cleaned up because it expired. Mark the circuit for close so a new * descriptor fetch can occur. */ circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_INTERNAL); goto end; } Loading Loading
changes/ticket28970 0 → 100644 +6 −0 Original line number Diff line number Diff line o Minor bugfixes (clietn, hidden service v3): - Fix a BUG() assertion that occurs within a very small race window between a client intro circuit opens and its descriptor that gets cleaned up from the cache. The circuit is now closed which will trigger a re-fetch of the descriptor and continue the HS connection. Fixes bug 28970; bugfix on 0.3.2.1-alpha.
src/feature/hs/hs_client.c +6 −2 Original line number Diff line number Diff line Loading @@ -682,8 +682,12 @@ setup_intro_circ_auth_key(origin_circuit_t *circ) tor_assert(circ); desc = hs_cache_lookup_as_client(&circ->hs_ident->identity_pk); if (BUG(desc == NULL)) { /* Opening intro circuit without the descriptor is no good... */ if (desc == NULL) { /* There is a very small race window between the opening of this circuit * and the client descriptor cache that gets purged (NEWNYM) or the * cleaned up because it expired. Mark the circuit for close so a new * descriptor fetch can occur. */ circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_INTERNAL); goto end; } Loading