[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [tor/master] Fix invalid-read when a managed proxy configuration fails.
commit 6e408060251e5a8136bb06353fcd8083ff3e28fa
Author: George Kadianakis <desnacked@xxxxxxxxxx>
Date: Thu Jul 18 16:01:49 2013 +0300
Fix invalid-read when a managed proxy configuration fails.
---
changes/bug9288 | 4 ++++
src/or/transports.c | 24 +++++++++++++++---------
2 files changed, 19 insertions(+), 9 deletions(-)
diff --git a/changes/bug9288 b/changes/bug9288
new file mode 100644
index 0000000..59bf414
--- /dev/null
+++ b/changes/bug9288
@@ -0,0 +1,4 @@
+ o Minor bugfixes:
+ - Fix an invalid memory read that occured when a pluggable
+ transport proxy failed its configuration protocol.
+ Fixes bug 9288.
diff --git a/src/or/transports.c b/src/or/transports.c
index cfec703..604d9fc 100644
--- a/src/or/transports.c
+++ b/src/or/transports.c
@@ -106,7 +106,7 @@ static void managed_proxy_destroy(managed_proxy_t *mp,
int also_terminate_process);
static void handle_finished_proxy(managed_proxy_t *mp);
-static void configure_proxy(managed_proxy_t *mp);
+static int configure_proxy(managed_proxy_t *mp);
static void parse_method_error(const char *line, int is_server_method);
#define parse_server_method_error(l) parse_method_error(l, 1)
@@ -573,10 +573,8 @@ pt_configure_remaining_proxies(void)
/* If the proxy is not fully configured, try to configure it
futher. */
if (!proxy_configuration_finished(mp))
- configure_proxy(mp);
-
- if (proxy_configuration_finished(mp))
- at_least_a_proxy_config_finished = 1;
+ if (configure_proxy(mp) == 1)
+ at_least_a_proxy_config_finished = 1;
} SMARTLIST_FOREACH_END(mp);
@@ -588,10 +586,14 @@ pt_configure_remaining_proxies(void)
mark_my_descriptor_dirty("configured managed proxies");
}
-/** Attempt to continue configuring managed proxy <b>mp</b>. */
-static void
+/** Attempt to continue configuring managed proxy <b>mp</b>.
+ * Return 1 if the transport configuration finished, and return 0
+ * otherwise (if we still have more configuring to do for this
+ * proxy). */
+static int
configure_proxy(managed_proxy_t *mp)
{
+ int configuration_finished = 0;
smartlist_t *proxy_output = NULL;
enum stream_status stream_status = 0;
@@ -601,7 +603,7 @@ configure_proxy(managed_proxy_t *mp)
mp->conf_state = PT_PROTO_FAILED_LAUNCH;
handle_finished_proxy(mp);
}
- return;
+ return 0;
}
tor_assert(mp->conf_state != PT_PROTO_INFANT);
@@ -633,13 +635,17 @@ configure_proxy(managed_proxy_t *mp)
done:
/* if the proxy finished configuring, exit the loop. */
- if (proxy_configuration_finished(mp))
+ if (proxy_configuration_finished(mp)) {
handle_finished_proxy(mp);
+ configuration_finished = 1;
+ }
if (proxy_output) {
SMARTLIST_FOREACH(proxy_output, char *, cp, tor_free(cp));
smartlist_free(proxy_output);
}
+
+ return configuration_finished;
}
/** Register server managed proxy <b>mp</b> transports to state */
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits