[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [tor/maint-0.4.1] Bug 30649: Check that machine is absent before warn
commit de3eb8c5e40fb45821c54cc237e95c98b39d0e2a
Author: Mike Perry <mikeperry-git@xxxxxxxxxxxxxx>
Date: Thu May 30 15:15:01 2019 -0700
Bug 30649: Check that machine is absent before warn
---
src/core/or/circuitpadding.c | 17 ++++++++++++++---
1 file changed, 14 insertions(+), 3 deletions(-)
diff --git a/src/core/or/circuitpadding.c b/src/core/or/circuitpadding.c
index b2315d822..ae32713bf 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 <b>circ</b> that match <b>machine_num</b>. */
-static void
+/**
+ * Free all the machineinfos in <b>circ</b> that match <b>machine_num</b>.
+ *
+ * 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;
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits