openssl: Add mutex for data_index 95/269195/1
authorSeonah Moon <seonah1.moon@samsung.com>
Tue, 11 Jan 2022 08:08:42 +0000 (17:08 +0900)
committerSeonah Moon <seonah1.moon@samsung.com>
Tue, 11 Jan 2022 08:08:42 +0000 (17:08 +0900)
Change-Id: Iae4d43dcabaca27f0d9b0b7861d67eaef4d95ad6

tls/openssl/gtlsclientconnection-openssl.c

index 263596b..facc0a7 100644 (file)
@@ -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))