]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
Addressed memory leaks in DHE and ECDHE rehandshakes.
authorNikos Mavrogiannopoulos <nmav@gnutls.org>
Fri, 9 May 2014 17:50:57 +0000 (19:50 +0200)
committerNikos Mavrogiannopoulos <nmav@gnutls.org>
Fri, 9 May 2014 17:50:57 +0000 (19:50 +0200)
The memory leak was uncovered by the Codenomicon TLS suite.

lib/auth/dh_common.c
lib/auth/ecdhe.c

index 54a47bd8ba4fbf34ce73ce0f03fcafad57e49944..4508fa3fff7dfcbfb113a776bcd6bd3203cc3ccd 100644 (file)
@@ -178,6 +178,9 @@ _gnutls_gen_dh_common_client_kx_int(gnutls_session_t session,
 int _gnutls_set_dh_pk_params(gnutls_session_t session, bigint_t g, bigint_t p,
                                unsigned q_bits)
 {
+       /* just in case we are resuming a session */
+       gnutls_pk_params_release(&session->key.dh_params);
+
        gnutls_pk_params_init(&session->key.dh_params);
 
        session->key.dh_params.params[DH_G] = _gnutls_mpi_copy(g);
@@ -210,6 +213,9 @@ _gnutls_proc_dh_common_server_kx(gnutls_session_t session,
        int i, bits, ret, p_bits;
        ssize_t data_size = _data_size;
        
+       /* just in case we are resuming a session */
+       gnutls_pk_params_release(&session->key.dh_params);
+
        gnutls_pk_params_init(&session->key.dh_params);
 
        i = 0;
index cdd87f778068f368dc519821273d4f386c9fc6d2..ad6c6c2e9901d3c853457b041b58f585e0422512 100644 (file)
@@ -274,6 +274,11 @@ _gnutls_proc_ecdh_common_server_kx(gnutls_session_t session,
        gnutls_ecc_curve_t curve;
        ssize_t data_size = _data_size;
 
+       /* just in case we are resuming a session */
+       gnutls_pk_params_release(&session->key.ecdh_params);
+
+       gnutls_pk_params_init(&session->key.ecdh_params);
+
        i = 0;
        DECR_LEN(data_size, 1);
        if (data[i++] != 3)
@@ -380,6 +385,11 @@ gen_ecdhe_server_kx(gnutls_session_t session, gnutls_buffer_st * data)
                return ret;
        }
 
+       /* just in case we are resuming a session */
+       gnutls_pk_params_release(&session->key.ecdh_params);
+
+       gnutls_pk_params_init(&session->key.ecdh_params);
+
        ret =
            _gnutls_ecdh_common_print_server_kx(session, data,
                                                _gnutls_session_ecc_curve_get