| Absolute File Name: | /home/opencoverage/opencoverage/guest-scripts/openssl/src/ssl/ssl_init.c |
| Source code | Switch to Preprocessed file |
| Line | Source | Count | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | /* | - | ||||||||||||
| 2 | * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. | - | ||||||||||||
| 3 | * | - | ||||||||||||
| 4 | * Licensed under the OpenSSL license (the "License"). You may not use | - | ||||||||||||
| 5 | * this file except in compliance with the License. You can obtain a copy | - | ||||||||||||
| 6 | * in the file LICENSE in the source distribution or at | - | ||||||||||||
| 7 | * https://www.openssl.org/source/license.html | - | ||||||||||||
| 8 | */ | - | ||||||||||||
| 9 | - | |||||||||||||
| 10 | #include "e_os.h" | - | ||||||||||||
| 11 | - | |||||||||||||
| 12 | #include "internal/err.h" | - | ||||||||||||
| 13 | #include <openssl/crypto.h> | - | ||||||||||||
| 14 | #include <openssl/evp.h> | - | ||||||||||||
| 15 | #include "ssl_locl.h" | - | ||||||||||||
| 16 | #include "internal/thread_once.h" | - | ||||||||||||
| 17 | - | |||||||||||||
| 18 | static int stopped; | - | ||||||||||||
| 19 | - | |||||||||||||
| 20 | static void ssl_library_stop(void); | - | ||||||||||||
| 21 | - | |||||||||||||
| 22 | static CRYPTO_ONCE ssl_base = CRYPTO_ONCE_STATIC_INIT; | - | ||||||||||||
| 23 | static int ssl_base_inited = 0; | - | ||||||||||||
| 24 | DEFINE_RUN_ONCE_STATIC(ossl_init_ssl_base) executed 1958 times by 2 tests: end of blockExecuted by:
| 1958 | ||||||||||||
| 25 | { | - | ||||||||||||
| 26 | #ifdef OPENSSL_INIT_DEBUG | - | ||||||||||||
| 27 | fprintf(stderr, "OPENSSL_INIT: ossl_init_ssl_base: " | - | ||||||||||||
| 28 | "Adding SSL ciphers and digests\n"); | - | ||||||||||||
| 29 | #endif | - | ||||||||||||
| 30 | #ifndef OPENSSL_NO_DES | - | ||||||||||||
| 31 | EVP_add_cipher(EVP_des_cbc()); | - | ||||||||||||
| 32 | EVP_add_cipher(EVP_des_ede3_cbc()); | - | ||||||||||||
| 33 | #endif | - | ||||||||||||
| 34 | #ifndef OPENSSL_NO_IDEA | - | ||||||||||||
| 35 | EVP_add_cipher(EVP_idea_cbc()); | - | ||||||||||||
| 36 | #endif | - | ||||||||||||
| 37 | #ifndef OPENSSL_NO_RC4 | - | ||||||||||||
| 38 | EVP_add_cipher(EVP_rc4()); | - | ||||||||||||
| 39 | # ifndef OPENSSL_NO_MD5 | - | ||||||||||||
| 40 | EVP_add_cipher(EVP_rc4_hmac_md5()); | - | ||||||||||||
| 41 | # endif | - | ||||||||||||
| 42 | #endif | - | ||||||||||||
| 43 | #ifndef OPENSSL_NO_RC2 | - | ||||||||||||
| 44 | EVP_add_cipher(EVP_rc2_cbc()); | - | ||||||||||||
| 45 | /* | - | ||||||||||||
| 46 | * Not actually used for SSL/TLS but this makes PKCS#12 work if an | - | ||||||||||||
| 47 | * application only calls SSL_library_init(). | - | ||||||||||||
| 48 | */ | - | ||||||||||||
| 49 | EVP_add_cipher(EVP_rc2_40_cbc()); | - | ||||||||||||
| 50 | #endif | - | ||||||||||||
| 51 | EVP_add_cipher(EVP_aes_128_cbc()); | - | ||||||||||||
| 52 | EVP_add_cipher(EVP_aes_192_cbc()); | - | ||||||||||||
| 53 | EVP_add_cipher(EVP_aes_256_cbc()); | - | ||||||||||||
| 54 | EVP_add_cipher(EVP_aes_128_gcm()); | - | ||||||||||||
| 55 | EVP_add_cipher(EVP_aes_256_gcm()); | - | ||||||||||||
| 56 | EVP_add_cipher(EVP_aes_128_ccm()); | - | ||||||||||||
| 57 | EVP_add_cipher(EVP_aes_256_ccm()); | - | ||||||||||||
| 58 | EVP_add_cipher(EVP_aes_128_cbc_hmac_sha1()); | - | ||||||||||||
| 59 | EVP_add_cipher(EVP_aes_256_cbc_hmac_sha1()); | - | ||||||||||||
| 60 | EVP_add_cipher(EVP_aes_128_cbc_hmac_sha256()); | - | ||||||||||||
| 61 | EVP_add_cipher(EVP_aes_256_cbc_hmac_sha256()); | - | ||||||||||||
| 62 | #ifndef OPENSSL_NO_ARIA | - | ||||||||||||
| 63 | EVP_add_cipher(EVP_aria_128_gcm()); | - | ||||||||||||
| 64 | EVP_add_cipher(EVP_aria_256_gcm()); | - | ||||||||||||
| 65 | #endif | - | ||||||||||||
| 66 | #ifndef OPENSSL_NO_CAMELLIA | - | ||||||||||||
| 67 | EVP_add_cipher(EVP_camellia_128_cbc()); | - | ||||||||||||
| 68 | EVP_add_cipher(EVP_camellia_256_cbc()); | - | ||||||||||||
| 69 | #endif | - | ||||||||||||
| 70 | #if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305) | - | ||||||||||||
| 71 | EVP_add_cipher(EVP_chacha20_poly1305()); | - | ||||||||||||
| 72 | #endif | - | ||||||||||||
| 73 | - | |||||||||||||
| 74 | #ifndef OPENSSL_NO_SEED | - | ||||||||||||
| 75 | EVP_add_cipher(EVP_seed_cbc()); | - | ||||||||||||
| 76 | #endif | - | ||||||||||||
| 77 | - | |||||||||||||
| 78 | #ifndef OPENSSL_NO_MD5 | - | ||||||||||||
| 79 | EVP_add_digest(EVP_md5()); | - | ||||||||||||
| 80 | EVP_add_digest_alias(SN_md5, "ssl3-md5"); | - | ||||||||||||
| 81 | EVP_add_digest(EVP_md5_sha1()); | - | ||||||||||||
| 82 | #endif | - | ||||||||||||
| 83 | EVP_add_digest(EVP_sha1()); /* RSA with sha1 */ | - | ||||||||||||
| 84 | EVP_add_digest_alias(SN_sha1, "ssl3-sha1"); | - | ||||||||||||
| 85 | EVP_add_digest_alias(SN_sha1WithRSAEncryption, SN_sha1WithRSA); | - | ||||||||||||
| 86 | EVP_add_digest(EVP_sha224()); | - | ||||||||||||
| 87 | EVP_add_digest(EVP_sha256()); | - | ||||||||||||
| 88 | EVP_add_digest(EVP_sha384()); | - | ||||||||||||
| 89 | EVP_add_digest(EVP_sha512()); | - | ||||||||||||
| 90 | #ifndef OPENSSL_NO_COMP | - | ||||||||||||
| 91 | # ifdef OPENSSL_INIT_DEBUG | - | ||||||||||||
| 92 | fprintf(stderr, "OPENSSL_INIT: ossl_init_ssl_base: " | - | ||||||||||||
| 93 | "SSL_COMP_get_compression_methods()\n"); | - | ||||||||||||
| 94 | # endif | - | ||||||||||||
| 95 | /* | - | ||||||||||||
| 96 | * This will initialise the built-in compression algorithms. The value | - | ||||||||||||
| 97 | * returned is a STACK_OF(SSL_COMP), but that can be discarded safely | - | ||||||||||||
| 98 | */ | - | ||||||||||||
| 99 | SSL_COMP_get_compression_methods(); | - | ||||||||||||
| 100 | #endif | - | ||||||||||||
| 101 | /* initialize cipher/digest methods table */ | - | ||||||||||||
| 102 | if (!ssl_load_ciphers())
| 0-1958 | ||||||||||||
| 103 | return 0; never executed: return 0; | 0 | ||||||||||||
| 104 | - | |||||||||||||
| 105 | #ifdef OPENSSL_INIT_DEBUG | - | ||||||||||||
| 106 | fprintf(stderr, "OPENSSL_INIT: ossl_init_ssl_base: " | - | ||||||||||||
| 107 | "SSL_add_ssl_module()\n"); | - | ||||||||||||
| 108 | #endif | - | ||||||||||||
| 109 | /* | - | ||||||||||||
| 110 | * We ignore an error return here. Not much we can do - but not that bad | - | ||||||||||||
| 111 | * either. We can still safely continue. | - | ||||||||||||
| 112 | */ | - | ||||||||||||
| 113 | OPENSSL_atexit(ssl_library_stop); | - | ||||||||||||
| 114 | ssl_base_inited = 1; | - | ||||||||||||
| 115 | return 1; executed 1958 times by 2 tests: return 1;Executed by:
| 1958 | ||||||||||||
| 116 | } | - | ||||||||||||
| 117 | - | |||||||||||||
| 118 | static CRYPTO_ONCE ssl_strings = CRYPTO_ONCE_STATIC_INIT; | - | ||||||||||||
| 119 | static int ssl_strings_inited = 0; | - | ||||||||||||
| 120 | DEFINE_RUN_ONCE_STATIC(ossl_init_load_ssl_strings) executed 546 times by 2 tests: end of blockExecuted by:
| 546 | ||||||||||||
| 121 | { | - | ||||||||||||
| 122 | /* | - | ||||||||||||
| 123 | * OPENSSL_NO_AUTOERRINIT is provided here to prevent at compile time | - | ||||||||||||
| 124 | * pulling in all the error strings during static linking | - | ||||||||||||
| 125 | */ | - | ||||||||||||
| 126 | #if !defined(OPENSSL_NO_ERR) && !defined(OPENSSL_NO_AUTOERRINIT) | - | ||||||||||||
| 127 | # ifdef OPENSSL_INIT_DEBUG | - | ||||||||||||
| 128 | fprintf(stderr, "OPENSSL_INIT: ossl_init_load_ssl_strings: " | - | ||||||||||||
| 129 | "ERR_load_SSL_strings()\n"); | - | ||||||||||||
| 130 | # endif | - | ||||||||||||
| 131 | ERR_load_SSL_strings(); | - | ||||||||||||
| 132 | ssl_strings_inited = 1; | - | ||||||||||||
| 133 | #endif | - | ||||||||||||
| 134 | return 1; executed 546 times by 2 tests: return 1;Executed by:
| 546 | ||||||||||||
| 135 | } | - | ||||||||||||
| 136 | - | |||||||||||||
| 137 | DEFINE_RUN_ONCE_STATIC(ossl_init_no_load_ssl_strings) never executed: end of block | 0 | ||||||||||||
| 138 | { | - | ||||||||||||
| 139 | /* Do nothing in this case */ | - | ||||||||||||
| 140 | return 1; never executed: return 1; | 0 | ||||||||||||
| 141 | } | - | ||||||||||||
| 142 | - | |||||||||||||
| 143 | static void ssl_library_stop(void) | - | ||||||||||||
| 144 | { | - | ||||||||||||
| 145 | /* Might be explicitly called and also by atexit */ | - | ||||||||||||
| 146 | if (stopped)
| 0-1958 | ||||||||||||
| 147 | return; never executed: return; | 0 | ||||||||||||
| 148 | stopped = 1; | - | ||||||||||||
| 149 | - | |||||||||||||
| 150 | if (ssl_base_inited) {
| 0-1958 | ||||||||||||
| 151 | #ifndef OPENSSL_NO_COMP | - | ||||||||||||
| 152 | # ifdef OPENSSL_INIT_DEBUG | - | ||||||||||||
| 153 | fprintf(stderr, "OPENSSL_INIT: ssl_library_stop: " | - | ||||||||||||
| 154 | "ssl_comp_free_compression_methods_int()\n"); | - | ||||||||||||
| 155 | # endif | - | ||||||||||||
| 156 | ssl_comp_free_compression_methods_int(); | - | ||||||||||||
| 157 | #endif | - | ||||||||||||
| 158 | } executed 1958 times by 2 tests: end of blockExecuted by:
| 1958 | ||||||||||||
| 159 | - | |||||||||||||
| 160 | if (ssl_strings_inited) {
| 546-1412 | ||||||||||||
| 161 | #ifdef OPENSSL_INIT_DEBUG | - | ||||||||||||
| 162 | fprintf(stderr, "OPENSSL_INIT: ssl_library_stop: " | - | ||||||||||||
| 163 | "err_free_strings_int()\n"); | - | ||||||||||||
| 164 | #endif | - | ||||||||||||
| 165 | /* | - | ||||||||||||
| 166 | * If both crypto and ssl error strings are inited we will end up | - | ||||||||||||
| 167 | * calling err_free_strings_int() twice - but that's ok. The second | - | ||||||||||||
| 168 | * time will be a no-op. It's easier to do that than to try and track | - | ||||||||||||
| 169 | * between the two libraries whether they have both been inited. | - | ||||||||||||
| 170 | */ | - | ||||||||||||
| 171 | err_free_strings_int(); | - | ||||||||||||
| 172 | } executed 546 times by 2 tests: end of blockExecuted by:
| 546 | ||||||||||||
| 173 | } executed 1958 times by 2 tests: end of blockExecuted by:
| 1958 | ||||||||||||
| 174 | - | |||||||||||||
| 175 | /* | - | ||||||||||||
| 176 | * If this function is called with a non NULL settings value then it must be | - | ||||||||||||
| 177 | * called prior to any threads making calls to any OpenSSL functions, | - | ||||||||||||
| 178 | * i.e. passing a non-null settings value is assumed to be single-threaded. | - | ||||||||||||
| 179 | */ | - | ||||||||||||
| 180 | int OPENSSL_init_ssl(uint64_t opts, const OPENSSL_INIT_SETTINGS * settings) | - | ||||||||||||
| 181 | { | - | ||||||||||||
| 182 | static int stoperrset = 0; | - | ||||||||||||
| 183 | - | |||||||||||||
| 184 | if (stopped) {
| 0-18826 | ||||||||||||
| 185 | if (!stoperrset) {
| 0 | ||||||||||||
| 186 | /* | - | ||||||||||||
| 187 | * We only ever set this once to avoid getting into an infinite | - | ||||||||||||
| 188 | * loop where the error system keeps trying to init and fails so | - | ||||||||||||
| 189 | * sets an error etc | - | ||||||||||||
| 190 | */ | - | ||||||||||||
| 191 | stoperrset = 1; | - | ||||||||||||
| 192 | SSLerr(SSL_F_OPENSSL_INIT_SSL, ERR_R_INIT_FAIL); | - | ||||||||||||
| 193 | } never executed: end of block | 0 | ||||||||||||
| 194 | return 0; never executed: return 0; | 0 | ||||||||||||
| 195 | } | - | ||||||||||||
| 196 | - | |||||||||||||
| 197 | if (!OPENSSL_init_crypto(opts
| 0-18826 | ||||||||||||
| 198 | #ifndef OPENSSL_NO_AUTOLOAD_CONFIG
| 0-18826 | ||||||||||||
| 199 | | OPENSSL_INIT_LOAD_CONFIG
| 0-18826 | ||||||||||||
| 200 | #endif
| 0-18826 | ||||||||||||
| 201 | | OPENSSL_INIT_ADD_ALL_CIPHERS
| 0-18826 | ||||||||||||
| 202 | | OPENSSL_INIT_ADD_ALL_DIGESTS,
| 0-18826 | ||||||||||||
| 203 | settings))
| 0-18826 | ||||||||||||
| 204 | return 0; never executed: return 0; | 0 | ||||||||||||
| 205 | - | |||||||||||||
| 206 | if (!RUN_ONCE(&ssl_base, ossl_init_ssl_base))
| 0-18826 | ||||||||||||
| 207 | return 0; never executed: return 0; | 0 | ||||||||||||
| 208 | - | |||||||||||||
| 209 | if ((opts & OPENSSL_INIT_NO_LOAD_SSL_STRINGS)
| 0-18826 | ||||||||||||
| 210 | && !RUN_ONCE(&ssl_strings, ossl_init_no_load_ssl_strings))
| 0 | ||||||||||||
| 211 | return 0; never executed: return 0; | 0 | ||||||||||||
| 212 | - | |||||||||||||
| 213 | if ((opts & OPENSSL_INIT_LOAD_SSL_STRINGS)
| 1789-17037 | ||||||||||||
| 214 | && !RUN_ONCE(&ssl_strings, ossl_init_load_ssl_strings))
| 0-17037 | ||||||||||||
| 215 | return 0; never executed: return 0; | 0 | ||||||||||||
| 216 | - | |||||||||||||
| 217 | return 1; executed 18826 times by 2 tests: return 1;Executed by:
| 18826 | ||||||||||||
| 218 | } | - | ||||||||||||
| Source code | Switch to Preprocessed file |