From a43d51e07e36332c3ff96e3e1926367ea1bcd3e5 Mon Sep 17 00:00:00 2001 From: Seonah Moon Date: Tue, 11 Jan 2022 17:08:42 +0900 Subject: [PATCH] openssl: Add mutex for data_index Change-Id: Iae4d43dcabaca27f0d9b0b7861d67eaef4d95ad6 --- tls/openssl/gtlsclientconnection-openssl.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/tls/openssl/gtlsclientconnection-openssl.c b/tls/openssl/gtlsclientconnection-openssl.c index 263596b..facc0a7 100644 --- a/tls/openssl/gtlsclientconnection-openssl.c +++ b/tls/openssl/gtlsclientconnection-openssl.c @@ -302,6 +302,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 handshake_thread_retrieve_certificate (SSL *ssl, @@ -311,10 +319,21 @@ handshake_thread_retrieve_certificate (SSL *ssl, GTlsClientConnectionOpenssl *client; GTlsConnectionBase *tls; GTlsCertificate *cert; + int idx; + DATA_INDEX_LOCK(data_index); + 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); + TIZEN_LOGI("ssl[%p] client[%p] tls[%p] data_index[%d]", ssl, client, tls, idx); + client->ca_list = SSL_get_client_CA_list (client->ssl); cert = g_tls_connection_get_certificate (G_TLS_CONNECTION (client)); @@ -514,10 +533,12 @@ g_tls_client_connection_openssl_initable_init (GInitable *initable, return FALSE; } + DATA_INDEX_LOCK(data_index); if (data_index == -1) { data_index = SSL_get_ex_new_index (0, (void *)"gtlsclientconnection", NULL, NULL, NULL); } SSL_set_ex_data (client->ssl, data_index, client); + DATA_INDEX_UNLOCK(data_index); #ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME if (hostname && !g_hostname_is_ip_address (hostname)) -- 2.7.4