]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Check return value from connection_or_connect() in channel_tls_connect()
authorAndrea Shepard <andrea@torproject.org>
Tue, 9 Oct 2012 01:24:04 +0000 (18:24 -0700)
committerAndrea Shepard <andrea@torproject.org>
Tue, 9 Oct 2012 01:24:04 +0000 (18:24 -0700)
It's possible for connection_or_connect() to fail and return NULL after it
sets tlschan->conn, so not checking leaves a channel hanging around in
CHANNEL_STATE_OPENING with a pointer to a freed or_connection_t forever.

src/or/channeltls.c

index 8a1b5ebc9fe3375dc94348ee3696a0e60dd81c90..03792dd796befe6b98cd4c9371373068dec521b4 100644 (file)
@@ -129,7 +129,7 @@ channel_tls_connect(const tor_addr_t *addr, uint16_t port,
     cell_ewma_get_tick();
 
   /* Set up or_connection stuff */
-  connection_or_connect(addr, port, id_digest, tlschan);
+  tlschan->conn = connection_or_connect(addr, port, id_digest, tlschan);
   /* connection_or_connect() will fill in tlschan->conn */
   if (!(tlschan->conn)) {
     channel_change_state(chan, CHANNEL_STATE_ERROR);