From: Andrea Shepard Date: Tue, 9 Oct 2012 01:24:04 +0000 (-0700) Subject: Check return value from connection_or_connect() in channel_tls_connect() X-Git-Tag: tor-0.2.4.4-alpha~37^2~75 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=71ba517e0c557d0ae35af7a5f99c8756f336a416;p=thirdparty%2Ftor.git Check return value from connection_or_connect() in channel_tls_connect() 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. --- diff --git a/src/or/channeltls.c b/src/or/channeltls.c index 8a1b5ebc9f..03792dd796 100644 --- a/src/or/channeltls.c +++ b/src/or/channeltls.c @@ -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);