From: Seonah Moon Date: Wed, 2 Jun 2021 10:40:16 +0000 (+0900) Subject: openssl: Add mutex for data_index X-Git-Tag: accepted/tizen/6.5/unified/20211029.012952^0 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fupstream%2Fglib-networking.git;a=commitdiff_plain;h=7ec0c71752971234fd9cff111e632ec308a7b2ae openssl: Add mutex for data_index Change-Id: Id2bc95af9ae6b7d3572f1600f85dc955ec337329 --- diff --git a/tls/openssl/gtlsclientconnection-openssl.c b/tls/openssl/gtlsclientconnection-openssl.c index 3c189c1..19ac307 100644 --- a/tls/openssl/gtlsclientconnection-openssl.c +++ b/tls/openssl/gtlsclientconnection-openssl.c @@ -322,6 +322,14 @@ g_tls_client_connection_openssl_client_connection_interface_init (GTlsClientConn } static int data_index = -1; +#ifdef TIZEN_EXT +G_LOCK_DEFINE_STATIC(data_index); +#define DATA_INDEX_LOCK(m) G_LOCK(m) +#define DATA_INDEX_UNLOCK(m) G_UNLOCK(m) +#else +#define DATA_INDEX_LOCK(m) +#define DATA_INDEX_UNLOCK(m) +#endif static int retrieve_certificate (SSL *ssl, @@ -335,14 +343,23 @@ retrieve_certificate (SSL *ssl, GTlsCertificate *cert; gboolean set_certificate = FALSE; + DATA_INDEX_LOCK(data_index); + int idx = data_index; client = SSL_get_ex_data (ssl, data_index); + DATA_INDEX_UNLOCK(data_index); + if (!client) + { + TIZEN_LOGE("SSL_get_ex_data(%p) returns NULL.", ssl); + return 0; + } + tls = G_TLS_CONNECTION_BASE (client); openssl = G_TLS_CONNECTION_OPENSSL (client); priv = g_tls_client_connection_openssl_get_instance_private (client); TIZEN_LOGI("ssl[%p] client[%p] tls[%p] openssl[%p] priv[%p] data_index[%d]", - ssl, client, tls, openssl, priv, data_index); + ssl, client, tls, openssl, priv, idx); tls->certificate_requested = TRUE; @@ -392,11 +409,14 @@ generate_session_id (SSL *ssl, GTlsClientConnectionOpensslPrivate *priv; int len; + DATA_INDEX_LOCK(data_index); + int idx = data_index; client = SSL_get_ex_data (ssl, data_index); + DATA_INDEX_UNLOCK(data_index); priv = g_tls_client_connection_openssl_get_instance_private (client); TIZEN_LOGI("ssl[%p] client[%p] priv[%p] data_index[%d]", - ssl, client, priv, data_index); + ssl, client, priv, idx); len = MIN (*id_len, g_bytes_get_size (priv->session_id)); memcpy (id, g_bytes_get_data (priv->session_id, NULL), len); @@ -543,7 +563,7 @@ g_tls_client_connection_openssl_initable_init (GInitable *initable, ERR_error_string (ERR_get_error (), NULL)); return FALSE; } - + DATA_INDEX_LOCK(data_index); if (data_index == -1) { data_index = SSL_get_ex_new_index (0, (void *)"gtlsclientconnection", NULL, NULL, NULL); TIZEN_LOGI("new data_index[%d]", data_index); @@ -552,7 +572,7 @@ g_tls_client_connection_openssl_initable_init (GInitable *initable, } SSL_set_ex_data (priv->ssl, data_index, client); TIZEN_LOGI("[SSL] set extra data: priv->ssl[%p] data_index[%d] client[%p]", priv->ssl, data_index, client); - + DATA_INDEX_UNLOCK(data_index); #ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME if (hostname) SSL_set_tlsext_host_name (priv->ssl, hostname);