Merge branch 'ticket40883_048_01' into maint-0.4.8

This commit is contained in:
David Goulet 2023-11-09 09:14:19 -05:00
commit be751a46e3
3 changed files with 18 additions and 2 deletions

4
changes/ticket40883 Normal file
View File

@ -0,0 +1,4 @@
o Major bugfixes (onion service, TROVE-2023-006):
- Fix a possible hard assert on a NULL pointer when recording a failed
rendezvous circuit on the service side for the MetricsPort. Fixes bug
40883; bugfix on 0.4.8.1-alpha

View File

@ -199,7 +199,12 @@ hs_metrics_update_by_ident(const hs_metrics_key_t key,
{ {
hs_service_t *service; hs_service_t *service;
tor_assert(ident_pk); if (!ident_pk) {
/* We can end up here in case this is used from a failure/closing path for
* which we might not have any identity key attacehed to a circuit or
* connection yet. Simply don't assume we have one. */
return;
}
service = hs_service_find(ident_pk); service = hs_service_find(ident_pk);
if (!service) { if (!service) {

View File

@ -40,7 +40,14 @@ rend_process_relay_cell(circuit_t *circ, const crypt_path_t *layer_hint,
int r = -2; int r = -2;
if (CIRCUIT_IS_ORIGIN(circ)) { if (CIRCUIT_IS_ORIGIN(circ)) {
origin_circ = TO_ORIGIN_CIRCUIT(circ); origin_circ = TO_ORIGIN_CIRCUIT(circ);
if (!layer_hint || layer_hint != origin_circ->cpath->prev) {
/* Opened onion service circuit receiving cell MUST have an hs_ident as it
* is the underlying assumption else we can't process the cell. If this is
* the case, we can't recover so close the circuit. */
if (BUG(!origin_circ->hs_ident)) {
circuit_mark_for_close(circ, END_CIRC_REASON_INTERNAL);
origin_circ = NULL;
} else if (!layer_hint || layer_hint != origin_circ->cpath->prev) {
log_fn(LOG_PROTOCOL_WARN, LD_APP, log_fn(LOG_PROTOCOL_WARN, LD_APP,
"Relay cell (rend purpose %d) from wrong hop on origin circ", "Relay cell (rend purpose %d) from wrong hop on origin circ",
command); command);