Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openj9
Path: blob/master/runtime/compiler/net/LoadSSLLibs.cpp
6000 views
1
/*******************************************************************************
2
* Copyright (c) 2019, 2021 IBM Corp. and others
3
*
4
* This program and the accompanying materials are made available under
5
* the terms of the Eclipse Public License 2.0 which accompanies this
6
* distribution and is available at https://www.eclipse.org/legal/epl-2.0/
7
* or the Apache License, Version 2.0 which accompanies this distribution and
8
* is available at https://www.apache.org/licenses/LICENSE-2.0.
9
*
10
* This Source Code may also be made available under the following
11
* Secondary Licenses when the conditions for such availability set
12
* forth in the Eclipse Public License, v. 2.0 are satisfied: GNU
13
* General Public License, version 2 with the GNU Classpath
14
* Exception [1] and GNU General Public License, version 2 with the
15
* OpenJDK Assembly Exception [2].
16
*
17
* [1] https://www.gnu.org/software/classpath/license.html
18
* [2] http://openjdk.java.net/legal/assembly-exception.html
19
*
20
* SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 OR LicenseRef-GPL-2.0 WITH Assembly-exception
21
*******************************************************************************/
22
23
#include "LoadSSLLibs.hpp"
24
25
#include <dlfcn.h>
26
#include <string.h>
27
28
#include "control/Options.hpp"
29
#include "env/VerboseLog.hpp"
30
31
#define OPENSSL_VERSION_1_0 "OpenSSL 1.0."
32
#define OPENSSL_VERSION_1_1 "OpenSSL 1.1."
33
34
OOpenSSL_version_t * OOpenSSL_version = NULL;
35
36
OSSL_load_error_strings_t * OSSL_load_error_strings = NULL;
37
OSSL_library_init_t * OSSL_library_init = NULL;
38
OOPENSSL_init_ssl_t * OOPENSSL_init_ssl = NULL;
39
40
OSSLv23_server_method_t * OSSLv23_server_method = NULL;
41
OSSLv23_client_method_t * OSSLv23_client_method = NULL;
42
43
OSSL_CTX_set_ecdh_auto_t * OSSL_CTX_set_ecdh_auto = NULL;
44
OSSL_CTX_ctrl_t * OSSL_CTX_ctrl = NULL;
45
46
OBIO_ctrl_t * OBIO_ctrl = NULL;
47
48
OSSL_CIPHER_get_name_t * OSSL_CIPHER_get_name = NULL;
49
OSSL_get_current_cipher_t * OSSL_get_current_cipher = NULL;
50
OSSL_get_cipher_t * OSSL_get_cipher = NULL;
51
52
OEVP_cleanup_t * OEVP_cleanup = NULL;
53
54
Osk_num_t * Osk_num = NULL;
55
Osk_value_t * Osk_value = NULL;
56
Osk_pop_free_t * Osk_pop_free = NULL;
57
58
Osk_X509_INFO_num_t * Osk_X509_INFO_num = NULL;
59
Osk_X509_INFO_value_t * Osk_X509_INFO_value = NULL;
60
Osk_X509_INFO_pop_free_t * Osk_X509_INFO_pop_free = NULL;
61
62
OSSL_new_t * OSSL_new = NULL;
63
OSSL_free_t * OSSL_free = NULL;
64
OSSL_set_connect_state_t * OSSL_set_connect_state = NULL;
65
OSSL_set_accept_state_t * OSSL_set_accept_state = NULL;
66
OSSL_set_fd_t * OSSL_set_fd = NULL;
67
OSSL_get_version_t * OSSL_get_version = NULL;
68
OSSL_accept_t * OSSL_accept = NULL;
69
OSSL_connect_t * OSSL_connect = NULL;
70
OSSL_get_peer_certificate_t * OSSL_get_peer_certificate = NULL;
71
OSSL_get_verify_result_t * OSSL_get_verify_result = NULL;
72
73
OSSL_CTX_new_t * OSSL_CTX_new = NULL;
74
OSSL_CTX_set_session_id_context_t * OSSL_CTX_set_session_id_context = NULL;
75
OSSL_CTX_use_PrivateKey_t * OSSL_CTX_use_PrivateKey = NULL;
76
OSSL_CTX_use_certificate_t * OSSL_CTX_use_certificate = NULL;
77
OSSL_CTX_check_private_key_t * OSSL_CTX_check_private_key = NULL;
78
OSSL_CTX_set_verify_t * OSSL_CTX_set_verify = NULL;
79
OSSL_CTX_free_t * OSSL_CTX_free = NULL;
80
OSSL_CTX_get_cert_store_t * OSSL_CTX_get_cert_store = NULL;
81
82
OBIO_new_mem_buf_t * OBIO_new_mem_buf = NULL;
83
OBIO_free_all_t * OBIO_free_all = NULL;
84
OBIO_new_ssl_t * OBIO_new_ssl = NULL;
85
OBIO_write_t * OBIO_write = NULL;
86
OBIO_read_t * OBIO_read = NULL;
87
88
OPEM_read_bio_PrivateKey_t * OPEM_read_bio_PrivateKey = NULL;
89
OPEM_read_bio_X509_t * OPEM_read_bio_X509 = NULL;
90
OPEM_X509_INFO_read_bio_t * OPEM_X509_INFO_read_bio = NULL;
91
92
OX509_INFO_free_t * OX509_INFO_free = NULL;
93
OX509_STORE_add_cert_t * OX509_STORE_add_cert = NULL;
94
OX509_STORE_add_crl_t * OX509_STORE_add_crl = NULL;
95
OX509_free_t * OX509_free = NULL;
96
97
OEVP_MD_CTX_new_t * OEVP_MD_CTX_new = NULL;
98
OEVP_MD_CTX_free_t * OEVP_MD_CTX_free = NULL;
99
OEVP_DigestInit_ex_t * OEVP_DigestInit_ex = NULL;
100
OEVP_DigestUpdate_t * OEVP_DigestUpdate = NULL;
101
OEVP_DigestFinal_ex_t * OEVP_DigestFinal_ex = NULL;
102
OEVP_sha256_t * OEVP_sha256 = NULL;
103
104
OERR_print_errors_fp_t * OERR_print_errors_fp = NULL;
105
106
int OSSL102_OOPENSSL_init_ssl(uint64_t opts, const void * settings)
107
{
108
// Does not exist in 1.0.2. Should not be called directly outside this file
109
return 0;
110
}
111
112
void OSSL110_load_error_strings(void)
113
{
114
// Do nothing here:
115
// SSL_load_error_strings() is deprecated in OpenSSL 1.1.0 by OPENSSL_init_ssl().
116
// CommunicationStream::initSSL() will call SSL_library_init. In 1.1.0 SSL_library_init
117
// is a macro of OPENSSL_init_ssl.
118
}
119
120
int OSSL110_library_init(void)
121
{
122
return (*OOPENSSL_init_ssl)(0, NULL);
123
}
124
125
#define OPENSSL102_SSL_CTRL_SET_ECDH_AUTO 94
126
long OSSL102_CTX_set_ecdh_auto(SSL_CTX *ctx, int onoff)
127
{
128
return (*OSSL_CTX_ctrl)(ctx, OPENSSL102_SSL_CTRL_SET_ECDH_AUTO, onoff, NULL);
129
}
130
131
long OSSL110_CTX_set_ecdh_auto(SSL_CTX *ctx, int onoff)
132
{
133
return ((onoff) != 0);
134
}
135
136
const char * handle_SSL_get_cipher(const SSL *ssl)
137
{
138
return (*OSSL_CIPHER_get_name)((*OSSL_get_current_cipher)(ssl));
139
}
140
141
void OEVP110_cleanup(void)
142
{
143
// In versions prior to 1.1.0 EVP_cleanup() removed all ciphers
144
// and digests from the table. It no longer has any effect in OpenSSL 1.1.0
145
}
146
147
# define OPENSSL102_CHECKED_STACK_OF(type, p) \
148
((_STACK*) (1 ? p : (STACK_OF(type)*)0))
149
150
# define OPENSSL102_CHECKED_SK_FREE_FUNC(type, p) \
151
((void (*)(void *)) ((1 ? p : (void (*)(type *))0)))
152
153
typedef void (*OPENSSL110_sk_freefunc)(void *);
154
155
int Osk102_X509_INFO_num(const STACK_OF(X509_INFO) *st)
156
{
157
//# define sk_X509_INFO_num(st) SKM_sk_num(X509_INFO, (st))
158
//# define SKM_sk_num(type, st) \
159
// sk_num(CHECKED_STACK_OF(type, st))
160
return (*Osk_num)(OPENSSL102_CHECKED_STACK_OF(X509_INFO, st));
161
}
162
163
int Osk110_X509_INFO_num(const STACK_OF(X509_INFO) *st)
164
{
165
// static ossl_inline int sk_##t1##_num(const STACK_OF(t1) *sk) \
166
// { \
167
// return OPENSSL_sk_num((const OPENSSL_STACK *)sk); \
168
// }
169
return (*Osk_num)((const _STACK *)st);
170
}
171
172
X509_INFO * Osk102_X509_INFO_value(const STACK_OF(X509_INFO) *st, int i)
173
{
174
//# define sk_X509_INFO_value(st, i) SKM_sk_value(X509_INFO, (st), (i))
175
//# define SKM_sk_value(type, st,i) \
176
// ((type *)sk_value(CHECKED_STACK_OF(type, st), i))
177
return (X509_INFO *)(*Osk_value)(OPENSSL102_CHECKED_STACK_OF(X509_INFO, st), i);
178
}
179
180
X509_INFO * Osk110_X509_INFO_value(const STACK_OF(X509_INFO) *st, int i)
181
{
182
// static ossl_inline t2 *sk_##t1##_value(const STACK_OF(t1) *sk, int idx) \
183
// { \
184
// return (t2 *)OPENSSL_sk_value((const OPENSSL_STACK *)sk, idx); \
185
// }
186
return (X509_INFO *)(*Osk_value)((const _STACK *)st, i);
187
}
188
189
void Osk102_X509_INFO_pop_free(STACK_OF(X509_INFO) *st, OX509_INFO_free_t *X509InfoFreeFunc)
190
{
191
//# define sk_X509_INFO_pop_free(st, free_func) SKM_sk_pop_free(X509_INFO, (st), (free_func))
192
//# define SKM_sk_pop_free(type, st, free_func) \
193
// sk_pop_free(CHECKED_STACK_OF(type, st), CHECKED_SK_FREE_FUNC(type, free_func))
194
(*Osk_pop_free)(OPENSSL102_CHECKED_STACK_OF(X509_INFO, st), OPENSSL102_CHECKED_SK_FREE_FUNC(X509_INFO, X509InfoFreeFunc));
195
}
196
197
void Osk110_X509_INFO_pop_free(STACK_OF(X509_INFO) *st, OX509_INFO_free_t *X509InfoFreeFunc)
198
{
199
// static ossl_inline void sk_##t1##_pop_free(STACK_OF(t1) *sk, sk_##t1##_freefunc freefunc) \
200
// { \
201
// OPENSSL_sk_pop_free((OPENSSL_STACK *)sk, (OPENSSL_sk_freefunc)freefunc); \
202
// }
203
(*Osk_pop_free)((_STACK *)st, (OPENSSL110_sk_freefunc)X509InfoFreeFunc);
204
}
205
206
namespace JITServer
207
{
208
void *loadLibssl()
209
{
210
void *result = NULL;
211
212
// Library names for OpenSSL 1.1.1, 1.1.0, 1.0.2 and symbolic links
213
static const char * const libNames[] =
214
{
215
"libssl.so.1.1", // 1.1.x library name
216
"libssl.so.1.0.0", // 1.0.x library name
217
"libssl.so.10", // 1.0.x library name on RHEL
218
"libssl.so" // general symlink library name
219
};
220
221
int numOfLibraries = sizeof(libNames) / sizeof(libNames[0]);
222
223
for (int i = 0; i < numOfLibraries; ++i)
224
{
225
result = dlopen(libNames[i], RTLD_NOW);
226
227
if (result)
228
{
229
return result;
230
}
231
}
232
return result;
233
}
234
235
void unloadLibssl(void *handle)
236
{
237
(void)dlclose(handle);
238
}
239
240
void * findLibsslSymbol(void *handle, const char *symName)
241
{
242
return dlsym(handle, symName);
243
}
244
245
int findLibsslVersion(void *handle)
246
{
247
const char * openssl_version = NULL;
248
int ossl_ver = -1;
249
250
OOpenSSL_version = (OOpenSSL_version_t*)findLibsslSymbol(handle, "OpenSSL_version");
251
252
if (OOpenSSL_version)
253
{
254
openssl_version = (*OOpenSSL_version)(0);
255
if (0 == strncmp(openssl_version, OPENSSL_VERSION_1_1, strlen(OPENSSL_VERSION_1_1)))
256
{
257
ossl_ver = 1;
258
}
259
}
260
else
261
{
262
OOpenSSL_version = (OOpenSSL_version_t*)findLibsslSymbol(handle, "SSLeay_version");
263
264
if (OOpenSSL_version)
265
{
266
openssl_version = (*OOpenSSL_version)(0);
267
if (0 == strncmp(openssl_version, OPENSSL_VERSION_1_0, strlen(OPENSSL_VERSION_1_0)))
268
{
269
ossl_ver = 0;
270
}
271
}
272
}
273
274
return ossl_ver;
275
}
276
277
#if defined(DEBUG)
278
void dbgPrintSymbols()
279
{
280
printf("=============================================================\n");
281
282
printf(" OpenSSL_version %p\n", OOpenSSL_version);
283
284
printf(" SSL_load_error_strings %p\n", OSSL_load_error_strings);
285
printf(" SSL_library_init %p\n", OSSL_library_init);
286
printf(" OPENSSL_init_ssl %p\n", OOPENSSL_init_ssl);
287
288
printf(" SSLv23_server_method %p\n", OSSLv23_server_method);
289
printf(" SSLv23_client_method %p\n", OSSLv23_client_method);
290
291
printf(" SSL_CTX_set_ecdh_auto %p\n", OSSL_CTX_set_ecdh_auto);
292
printf(" SSL_CTX_ctrl %p\n", OSSL_CTX_ctrl);
293
294
printf(" BIO_ctrl %p\n", OBIO_ctrl);
295
296
printf(" SSL_CIPHER_get_name %p\n", OSSL_CIPHER_get_name);
297
printf(" SSL_get_current_cipher %p\n", OSSL_get_current_cipher);
298
299
printf(" EVP_cleanup %p\n", OEVP_cleanup);
300
301
printf(" sk_num %p\n", Osk_num);
302
printf(" sk_value %p\n", Osk_value);
303
printf(" sk_pop_free %p\n", Osk_pop_free);
304
305
printf(" X509_INFO_free %p\n", OX509_INFO_free);
306
printf(" sk_X509_INFO_num %p\n", Osk_X509_INFO_num);
307
printf(" sk_X509_INFO_value %p\n", Osk_X509_INFO_value);
308
printf(" sk_X509_INFO_pop_free %p\n", Osk_X509_INFO_pop_free);
309
310
printf(" SSL_new %p\n", OSSL_new);
311
printf(" SSL_free %p\n", OSSL_free);
312
printf(" SSL_set_connect_state %p\n", OSSL_set_connect_state);
313
printf(" SSL_set_accept_state %p\n", OSSL_set_accept_state);
314
printf(" SSL_set_fd %p\n", OSSL_set_fd);
315
printf(" SSL_get_version %p\n", OSSL_get_version);
316
printf(" SSL_accept %p\n", OSSL_accept);
317
printf(" SSL_connect %p\n", OSSL_connect);
318
printf(" SSL_get_peer_certificate %p\n", OSSL_get_peer_certificate);
319
printf(" SSL_get_verify_result %p\n", OSSL_get_verify_result);
320
321
printf(" SSL_CTX_new %p\n", OSSL_CTX_new);
322
printf(" SSL_CTX_set_session_id_context %p\n", OSSL_CTX_set_session_id_context);
323
printf(" SSL_CTX_use_PrivateKey %p\n", OSSL_CTX_use_PrivateKey);
324
printf(" SSL_CTX_use_certificate %p\n", OSSL_CTX_use_certificate);
325
printf(" SSL_CTX_check_private_key %p\n", OSSL_CTX_check_private_key);
326
printf(" SSL_CTX_set_verify %p\n", OSSL_CTX_set_verify);
327
printf(" SSL_CTX_free %p\n", OSSL_CTX_free);
328
printf(" SSL_CTX_get_cert_store %p\n", OSSL_CTX_get_cert_store);
329
330
printf(" BIO_new_mem_buf %p\n", OBIO_new_mem_buf);
331
printf(" BIO_free_all %p\n", OBIO_free_all);
332
printf(" BIO_new_ssl %p\n", OBIO_new_ssl);
333
printf(" BIO_write %p\n", OBIO_write);
334
printf(" BIO_read %p\n", OBIO_read);
335
336
printf(" PEM_read_bio_PrivateKey %p\n", OPEM_read_bio_PrivateKey);
337
printf(" PEM_read_bio_X509 %p\n", OPEM_read_bio_X509);
338
printf(" PEM_X509_INFO_read_bio %p\n", OPEM_X509_INFO_read_bio);
339
340
printf(" X509_STORE_add_cert %p\n", OX509_STORE_add_cert);
341
printf(" X509_STORE_add_crl %p\n", OX509_STORE_add_crl);
342
printf(" X509_free %p\n", OX509_free);
343
344
printf(" EVP_MD_CTX_new %p\n", OEVP_MD_CTX_new);
345
printf(" EVP_MD_CTX_free %p\n", OEVP_MD_CTX_free);
346
printf(" EVP_DigestInit_ex %p\n", OEVP_DigestInit_ex);
347
printf(" EVP_DigestUpdate %p\n", OEVP_DigestUpdate);
348
printf(" EVP_DigestFinal_ex %p\n", OEVP_DigestFinal_ex);
349
printf(" EVP_sha256 %p\n", OEVP_sha256);
350
351
printf(" ERR_print_errors_fp %p\n", OERR_print_errors_fp);
352
353
printf("=============================================================\n\n");
354
}
355
#endif /* defined(DEBUG) */
356
357
bool loadLibsslAndFindSymbols()
358
{
359
void *handle = NULL;
360
361
handle = loadLibssl();
362
if (!handle)
363
{
364
printf("#JITServer: Failed to load libssl\n");
365
return false;
366
}
367
368
int ossl_ver = findLibsslVersion(handle);
369
if (-1 == ossl_ver)
370
{
371
printf("#JITServer: Failed to find a correct version of libssl\n");
372
unloadLibssl(handle);
373
return false;
374
}
375
376
377
if (0 == ossl_ver)
378
{
379
OOPENSSL_init_ssl = &OSSL102_OOPENSSL_init_ssl;
380
381
OSSL_load_error_strings = (OSSL_load_error_strings_t *)findLibsslSymbol(handle, "SSL_load_error_strings");
382
OSSL_library_init = (OSSL_library_init_t *)findLibsslSymbol(handle, "SSL_library_init");
383
384
OSSLv23_server_method = (OSSLv23_server_method_t *)findLibsslSymbol(handle, "SSLv23_server_method");
385
OSSLv23_client_method = (OSSLv23_client_method_t *)findLibsslSymbol(handle, "SSLv23_client_method");
386
387
OSSL_CTX_set_ecdh_auto = &OSSL102_CTX_set_ecdh_auto;
388
389
OEVP_cleanup = (OEVP_cleanup_t *)findLibsslSymbol(handle, "EVP_cleanup");
390
391
Osk_num = (Osk_num_t *)findLibsslSymbol(handle, "sk_num");
392
Osk_value = (Osk_value_t *)findLibsslSymbol(handle, "sk_value");
393
Osk_pop_free = (Osk_pop_free_t *)findLibsslSymbol(handle, "sk_pop_free");
394
395
Osk_X509_INFO_num = &Osk102_X509_INFO_num;
396
Osk_X509_INFO_value = &Osk102_X509_INFO_value;
397
Osk_X509_INFO_pop_free = &Osk102_X509_INFO_pop_free;
398
}
399
else
400
{
401
OOPENSSL_init_ssl = (OOPENSSL_init_ssl_t *)findLibsslSymbol(handle, "OPENSSL_init_ssl");
402
403
OSSL_load_error_strings = &OSSL110_load_error_strings;
404
OSSL_library_init = &OSSL110_library_init;
405
406
OSSLv23_server_method = (OSSLv23_server_method_t *)findLibsslSymbol(handle, "TLS_server_method");
407
OSSLv23_client_method = (OSSLv23_client_method_t *)findLibsslSymbol(handle, "TLS_client_method");
408
409
OSSL_CTX_set_ecdh_auto = &OSSL110_CTX_set_ecdh_auto;
410
411
OEVP_cleanup = &OEVP110_cleanup;
412
413
Osk_num = (Osk_num_t *)findLibsslSymbol(handle, "OPENSSL_sk_num");
414
Osk_value = (Osk_value_t *)findLibsslSymbol(handle, "OPENSSL_sk_value");
415
Osk_pop_free = (Osk_pop_free_t *)findLibsslSymbol(handle, "OPENSSL_sk_pop_free");
416
417
Osk_X509_INFO_num = &Osk110_X509_INFO_num;
418
Osk_X509_INFO_value = &Osk110_X509_INFO_value;
419
Osk_X509_INFO_pop_free = &Osk110_X509_INFO_pop_free;
420
}
421
422
OSSL_CTX_ctrl = (OSSL_CTX_ctrl_t *)findLibsslSymbol(handle, "SSL_CTX_ctrl");
423
OBIO_ctrl = (OBIO_ctrl_t *)findLibsslSymbol(handle, "BIO_ctrl");
424
425
OSSL_CIPHER_get_name = (OSSL_CIPHER_get_name_t *)findLibsslSymbol(handle, "SSL_CIPHER_get_name");
426
OSSL_get_current_cipher = (OSSL_get_current_cipher_t *)findLibsslSymbol(handle, "SSL_get_current_cipher");
427
OSSL_get_cipher = &handle_SSL_get_cipher;
428
429
430
OSSL_new = (OSSL_new_t *)findLibsslSymbol(handle, "SSL_new");
431
OSSL_free = (OSSL_free_t *)findLibsslSymbol(handle, "SSL_free");
432
OSSL_set_connect_state = (OSSL_set_connect_state_t *)findLibsslSymbol(handle, "SSL_set_connect_state");
433
OSSL_set_accept_state = (OSSL_set_accept_state_t *)findLibsslSymbol(handle, "SSL_set_accept_state");
434
OSSL_set_fd = (OSSL_set_fd_t *)findLibsslSymbol(handle, "SSL_set_fd");
435
OSSL_get_version = (OSSL_get_version_t *)findLibsslSymbol(handle, "SSL_get_version");
436
OSSL_accept = (OSSL_accept_t *)findLibsslSymbol(handle, "SSL_accept");
437
OSSL_connect = (OSSL_connect_t *)findLibsslSymbol(handle, "SSL_connect");
438
OSSL_get_peer_certificate = (OSSL_get_peer_certificate_t *)findLibsslSymbol(handle, "SSL_get_peer_certificate");
439
OSSL_get_verify_result = (OSSL_get_verify_result_t *)findLibsslSymbol(handle, "SSL_get_verify_result");
440
441
OSSL_CTX_new = (OSSL_CTX_new_t *)findLibsslSymbol(handle, "SSL_CTX_new");
442
OSSL_CTX_set_session_id_context = (OSSL_CTX_set_session_id_context_t *)findLibsslSymbol(handle, "SSL_CTX_set_session_id_context");
443
OSSL_CTX_use_PrivateKey = (OSSL_CTX_use_PrivateKey_t *)findLibsslSymbol(handle, "SSL_CTX_use_PrivateKey");
444
OSSL_CTX_use_certificate = (OSSL_CTX_use_certificate_t *)findLibsslSymbol(handle, "SSL_CTX_use_certificate");
445
OSSL_CTX_check_private_key = (OSSL_CTX_check_private_key_t *)findLibsslSymbol(handle, "SSL_CTX_check_private_key");
446
OSSL_CTX_set_verify = (OSSL_CTX_set_verify_t *)findLibsslSymbol(handle, "SSL_CTX_set_verify");
447
OSSL_CTX_free = (OSSL_CTX_free_t *)findLibsslSymbol(handle, "SSL_CTX_free");
448
OSSL_CTX_get_cert_store = (OSSL_CTX_get_cert_store_t *)findLibsslSymbol(handle, "SSL_CTX_get_cert_store");
449
450
OBIO_new_mem_buf = (OBIO_new_mem_buf_t *)findLibsslSymbol(handle, "BIO_new_mem_buf");
451
OBIO_free_all = (OBIO_free_all_t *)findLibsslSymbol(handle, "BIO_free_all");
452
OBIO_new_ssl = (OBIO_new_ssl_t *)findLibsslSymbol(handle, "BIO_new_ssl");
453
OBIO_write = (OBIO_write_t *)findLibsslSymbol(handle, "BIO_write");
454
OBIO_read = (OBIO_read_t *)findLibsslSymbol(handle, "BIO_read");
455
456
OPEM_read_bio_PrivateKey = (OPEM_read_bio_PrivateKey_t *)findLibsslSymbol(handle, "PEM_read_bio_PrivateKey");
457
OPEM_read_bio_X509 = (OPEM_read_bio_X509_t *)findLibsslSymbol(handle, "PEM_read_bio_X509");
458
OPEM_X509_INFO_read_bio = (OPEM_X509_INFO_read_bio_t *)findLibsslSymbol(handle, "PEM_X509_INFO_read_bio");
459
460
OX509_INFO_free = (OX509_INFO_free_t *)findLibsslSymbol(handle, "X509_INFO_free");
461
OX509_STORE_add_cert = (OX509_STORE_add_cert_t *)findLibsslSymbol(handle, "X509_STORE_add_cert");
462
OX509_STORE_add_crl = (OX509_STORE_add_crl_t *)findLibsslSymbol(handle, "X509_STORE_add_crl");
463
OX509_free = (OX509_free_t *)findLibsslSymbol(handle, "X509_free");
464
465
OEVP_MD_CTX_new = (OEVP_MD_CTX_new_t *)findLibsslSymbol(handle, (ossl_ver == 0) ? "EVP_MD_CTX_create"
466
: "EVP_MD_CTX_new");
467
OEVP_MD_CTX_free = (OEVP_MD_CTX_free_t *)findLibsslSymbol(handle, (ossl_ver == 0) ? "EVP_MD_CTX_destroy"
468
: "EVP_MD_CTX_free");
469
OEVP_DigestInit_ex = (OEVP_DigestInit_ex_t *)findLibsslSymbol(handle, "EVP_DigestInit_ex");
470
OEVP_DigestUpdate = (OEVP_DigestUpdate_t *)findLibsslSymbol(handle, "EVP_DigestUpdate");
471
OEVP_DigestFinal_ex = (OEVP_DigestFinal_ex_t *)findLibsslSymbol(handle, "EVP_DigestFinal_ex");
472
OEVP_sha256 = (OEVP_sha256_t *)findLibsslSymbol(handle, "EVP_sha256");
473
474
OERR_print_errors_fp = (OERR_print_errors_fp_t *)findLibsslSymbol(handle, "ERR_print_errors_fp");
475
476
if (
477
(OOpenSSL_version == NULL) ||
478
479
(OSSL_load_error_strings == NULL) ||
480
(OSSL_library_init == NULL) ||
481
(OOPENSSL_init_ssl == NULL) ||
482
483
(OSSLv23_server_method == NULL) ||
484
(OSSLv23_client_method == NULL) ||
485
486
(OEVP_cleanup == NULL) ||
487
488
(OSSL_CTX_ctrl == NULL) ||
489
(OBIO_ctrl == NULL) ||
490
491
(Osk_num == NULL) ||
492
(Osk_value == NULL) ||
493
(Osk_pop_free == NULL) ||
494
495
(OSSL_CIPHER_get_name == NULL) ||
496
(OSSL_get_current_cipher == NULL) ||
497
498
(OSSL_new == NULL) ||
499
(OSSL_free == NULL) ||
500
(OSSL_set_connect_state == NULL) ||
501
(OSSL_set_accept_state == NULL) ||
502
(OSSL_set_fd == NULL) ||
503
(OSSL_get_version == NULL) ||
504
(OSSL_accept == NULL) ||
505
(OSSL_connect == NULL) ||
506
(OSSL_get_peer_certificate == NULL) ||
507
(OSSL_get_verify_result == NULL) ||
508
509
(OSSL_CTX_new == NULL) ||
510
(OSSL_CTX_set_session_id_context == NULL) ||
511
(OSSL_CTX_use_PrivateKey == NULL) ||
512
(OSSL_CTX_use_certificate == NULL) ||
513
(OSSL_CTX_check_private_key == NULL) ||
514
(OSSL_CTX_set_verify == NULL) ||
515
(OSSL_CTX_free == NULL) ||
516
(OSSL_CTX_get_cert_store == NULL) ||
517
518
(OBIO_new_mem_buf == NULL) ||
519
(OBIO_free_all == NULL) ||
520
(OBIO_new_ssl == NULL) ||
521
(OBIO_write == NULL) ||
522
(OBIO_read == NULL) ||
523
524
(OPEM_read_bio_PrivateKey == NULL) ||
525
(OPEM_read_bio_X509 == NULL) ||
526
(OPEM_X509_INFO_read_bio == NULL) ||
527
528
(OX509_INFO_free == NULL) ||
529
(OX509_STORE_add_cert == NULL) ||
530
(OX509_STORE_add_crl == NULL) ||
531
(OX509_free == NULL) ||
532
533
(OEVP_MD_CTX_new == NULL) ||
534
(OEVP_MD_CTX_free == NULL) ||
535
(OEVP_DigestInit_ex == NULL) ||
536
(OEVP_DigestUpdate == NULL) ||
537
(OEVP_DigestFinal_ex == NULL) ||
538
(OEVP_sha256 == NULL) ||
539
540
(OERR_print_errors_fp == NULL)
541
)
542
{
543
printf("#JITServer: Failed to load all the required OpenSSL symbols\n");
544
#if defined(DEBUG)
545
dbgPrintSymbols();
546
#endif /* defined(DEBUG) */
547
unloadLibssl(handle);
548
return false;
549
}
550
551
if (TR::Options::getVerboseOption(TR_VerboseJITServer))
552
TR_VerboseLog::writeLineLocked(TR_Vlog_JITServer, "Built against (%s); Loaded with (%s)\n",
553
OPENSSL_VERSION_TEXT, (*OOpenSSL_version)(0));
554
555
return true;
556
}
557
558
}; // JITServer
559
560