From: Mike Perry Date: Thu, 30 May 2019 22:15:01 +0000 (-0700) Subject: Bug 30649: Check that machine is absent before warn X-Git-Tag: tor-0.4.1.4-rc~12^2^2~4 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=de3eb8c5e40fb45821c54cc237e95c98b39d0e2a;p=thirdparty%2Ftor.git Bug 30649: Check that machine is absent before warn --- diff --git a/src/core/or/circuitpadding.c b/src/core/or/circuitpadding.c index b2315d822f..ae32713bfa 100644 --- a/src/core/or/circuitpadding.c +++ b/src/core/or/circuitpadding.c @@ -254,17 +254,25 @@ circpad_marked_circuit_for_padding(circuit_t *circ, int reason) return 0; // No machine wanted to keep the circuit open; mark for close } -/** Free all the machineinfos in circ that match machine_num. */ -static void +/** + * Free all the machineinfos in circ that match machine_num. + * + * Returns true if any machineinfos with that number were freed. + * False otherwise. */ +static int free_circ_machineinfos_with_machine_num(circuit_t *circ, int machine_num) { + int found = 0; FOR_EACH_CIRCUIT_MACHINE_BEGIN(i) { if (circ->padding_machine[i] && circ->padding_machine[i]->machine_num == machine_num) { circpad_circuit_machineinfo_free_idx(circ, i); circ->padding_machine[i] = NULL; + found = 1; } } FOR_EACH_CIRCUIT_MACHINE_END; + + return found; } /** @@ -2811,7 +2819,10 @@ circpad_handle_padding_negotiate(circuit_t *circ, cell_t *cell) if (negotiate->command == CIRCPAD_COMMAND_STOP) { /* Free the machine corresponding to this machine type */ - free_circ_machineinfos_with_machine_num(circ, negotiate->machine_type); + if (free_circ_machineinfos_with_machine_num(circ, + negotiate->machine_type)) { + goto done; + } log_fn(LOG_WARN, LD_CIRC, "Received circuit padding stop command for unknown machine."); goto err;