Fix a memory leak in the ClientHello extension parsing
authorMatt Caswell <matt@openssl.org>
Mon, 31 Oct 2016 12:48:37 +0000 (12:48 +0000)
committerMatt Caswell <matt@openssl.org>
Wed, 9 Nov 2016 09:10:29 +0000 (09:10 +0000)
We should be freeing up the raw extension data after we've finished with it.

Reviewed-by: Kurt Roeckx <kurt@openssl.org>
Reviewed-by: Rich Salz <rsalz@openssl.org>
ssl/statem/statem_srvr.c

index c7841ac48efdb841383386c9537d5827b6dfba23..ca7f5afe4b581badadc55ce43901c7baaf87c9ea 100644 (file)
@@ -907,6 +907,8 @@ MSG_PROCESS_RETURN tls_process_client_hello(SSL *s, PACKET *pkt)
      * structure.
      */
 
+    memset(&clienthello, 0, sizeof(clienthello));
+
     clienthello.isv2 = RECORD_LAYER_is_sslv2_record(&s->rlayer);
 
     PACKET_null_init(&cookie);
@@ -1423,6 +1425,7 @@ MSG_PROCESS_RETURN tls_process_client_hello(SSL *s, PACKET *pkt)
     }
 
     sk_SSL_CIPHER_free(ciphers);
+    OPENSSL_free(clienthello.pre_proc_exts);
     return MSG_PROCESS_CONTINUE_PROCESSING;
  f_err:
     ssl3_send_alert(s, SSL3_AL_FATAL, al);
@@ -1430,6 +1433,7 @@ MSG_PROCESS_RETURN tls_process_client_hello(SSL *s, PACKET *pkt)
     ossl_statem_set_error(s);
 
     sk_SSL_CIPHER_free(ciphers);
+    OPENSSL_free(clienthello.pre_proc_exts);
     return MSG_PROCESS_ERROR;
 
 }