summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/crypto_init.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/crypto_init.c')
-rw-r--r--src/lib/libcrypto/crypto_init.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/lib/libcrypto/crypto_init.c b/src/lib/libcrypto/crypto_init.c
index 44c4846762..79c100f668 100644
--- a/src/lib/libcrypto/crypto_init.c
+++ b/src/lib/libcrypto/crypto_init.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: crypto_init.c,v 1.24 2025/05/24 07:23:14 jsing Exp $ */ 1/* $OpenBSD: crypto_init.c,v 1.25 2025/05/24 07:41:14 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2018 Bob Beck <beck@openbsd.org> 3 * Copyright (c) 2018 Bob Beck <beck@openbsd.org>
4 * 4 *
@@ -37,6 +37,8 @@ static pthread_once_t crypto_init_once = PTHREAD_ONCE_INIT;
37static pthread_t crypto_init_thread; 37static pthread_t crypto_init_thread;
38static int crypto_init_cleaned_up; 38static int crypto_init_cleaned_up;
39 39
40void openssl_init_crypto_constructor(void) __attribute__((constructor));
41
40#ifndef HAVE_CRYPTO_CPU_CAPS_INIT 42#ifndef HAVE_CRYPTO_CPU_CAPS_INIT
41void 43void
42crypto_cpu_caps_init(void) 44crypto_cpu_caps_init(void)
@@ -44,6 +46,17 @@ crypto_cpu_caps_init(void)
44} 46}
45#endif 47#endif
46 48
49/*
50 * This function is invoked as a constructor when the library is loaded. The
51 * code run from here must not allocate memory or trigger signals. The only
52 * safe code is to read data and update global variables.
53 */
54void
55openssl_init_crypto_constructor(void)
56{
57 crypto_cpu_caps_init();
58}
59
47void 60void
48OPENSSL_init(void) 61OPENSSL_init(void)
49{ 62{
@@ -55,8 +68,6 @@ OPENSSL_init_crypto_internal(void)
55{ 68{
56 crypto_init_thread = pthread_self(); 69 crypto_init_thread = pthread_self();
57 70
58 crypto_cpu_caps_init();
59
60 ERR_load_crypto_strings(); 71 ERR_load_crypto_strings();
61} 72}
62 73