Skip to content

Commit a5891cd

Browse files
BasharRadyaroot
authored andcommitted
issue: 4436329 Load libssl symbols from specific handle
Load libssl symbols from speicific handle. Signed-off-by: Bashar Abdelgafer <[email protected]>
1 parent 6872781 commit a5891cd

File tree

1 file changed

+30
-2
lines changed

1 file changed

+30
-2
lines changed

src/core/sock/sockinfo_ulp.cpp

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,10 +116,34 @@ template <typename T> static void dlsym_default(T &ptr, const char *name)
116116
dlsym_handle(ptr, name, RTLD_DEFAULT);
117117
}
118118

119-
#define XLIO_TLS_API_FIND(__name) dlsym_default(s_tls_api.__name, #__name);
119+
static void *openssl_handle = nullptr;
120120

121-
void xlio_tls_api_setup()
121+
#define XLIO_TLS_API_FIND(__name) dlsym_handle(s_tls_api.__name, #__name, openssl_handle);
122+
123+
inline bool check_openssl_loaded()
124+
{
125+
openssl_handle = dlopen("libssl.so.3", RTLD_NOW | RTLD_GLOBAL);
126+
if (!openssl_handle) {
127+
vlog_printf(VLOG_DEBUG, "Failed to dlopen libssl.so.3: %s", dlerror());
128+
return false;
129+
} else {
130+
vlog_printf(VLOG_DEBUG, "Successfully loaded libssl.so.3");
131+
return true;
132+
}
133+
}
134+
135+
inline void xlio_tls_api_setup()
122136
{
137+
if (openssl_handle) {
138+
// OpenSSL symbols is already loaded
139+
return;
140+
}
141+
142+
if (!check_openssl_loaded()) {
143+
vlog_printf(VLOG_DEBUG, "OpenSSL library not found or failed to load");
144+
return;
145+
}
146+
123147
XLIO_TLS_API_FIND(EVP_CIPHER_CTX_new);
124148
XLIO_TLS_API_FIND(EVP_CIPHER_CTX_free);
125149
XLIO_TLS_API_FIND(EVP_CIPHER_CTX_reset);
@@ -132,6 +156,7 @@ void xlio_tls_api_setup()
132156
XLIO_TLS_API_FIND(EVP_EncryptInit_ex);
133157
XLIO_TLS_API_FIND(EVP_EncryptUpdate);
134158
XLIO_TLS_API_FIND(EVP_EncryptFinal_ex);
159+
135160
if (s_tls_api.EVP_CIPHER_CTX_new && s_tls_api.EVP_CIPHER_CTX_free &&
136161
s_tls_api.EVP_CIPHER_CTX_reset && s_tls_api.EVP_aes_128_gcm && s_tls_api.EVP_aes_256_gcm &&
137162
s_tls_api.EVP_DecryptInit_ex && s_tls_api.EVP_DecryptUpdate &&
@@ -508,6 +533,9 @@ int sockinfo_tcp_ops_tls::setsockopt(int __level, int __optname, const void *__o
508533
return -1;
509534
}
510535
} else {
536+
#ifdef DEFINED_UTLS
537+
xlio_tls_api_setup();
538+
#endif /* DEFINED_UTLS */
511539
/* RX offload checks. */
512540
if (unlikely(!m_p_sock->is_utls_supported(UTLS_MODE_RX))) {
513541
si_ulp_logdbg("TLS_RX is not supported.");

0 commit comments

Comments
 (0)