OpenCoverage

eng_init.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/libressl/src/crypto/engine/eng_init.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* $OpenBSD: eng_init.c,v 1.9 2018/04/14 07:09:21 tb Exp $ */-
2/* ====================================================================-
3 * Copyright (c) 1999-2001 The OpenSSL Project. All rights reserved.-
4 *-
5 * Redistribution and use in source and binary forms, with or without-
6 * modification, are permitted provided that the following conditions-
7 * are met:-
8 *-
9 * 1. Redistributions of source code must retain the above copyright-
10 * notice, this list of conditions and the following disclaimer.-
11 *-
12 * 2. Redistributions in binary form must reproduce the above copyright-
13 * notice, this list of conditions and the following disclaimer in-
14 * the documentation and/or other materials provided with the-
15 * distribution.-
16 *-
17 * 3. All advertising materials mentioning features or use of this-
18 * software must display the following acknowledgment:-
19 * "This product includes software developed by the OpenSSL Project-
20 * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"-
21 *-
22 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to-
23 * endorse or promote products derived from this software without-
24 * prior written permission. For written permission, please contact-
25 * licensing@OpenSSL.org.-
26 *-
27 * 5. Products derived from this software may not be called "OpenSSL"-
28 * nor may "OpenSSL" appear in their names without prior written-
29 * permission of the OpenSSL Project.-
30 *-
31 * 6. Redistributions of any form whatsoever must retain the following-
32 * acknowledgment:-
33 * "This product includes software developed by the OpenSSL Project-
34 * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"-
35 *-
36 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY-
37 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE-
38 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR-
39 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR-
40 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,-
41 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT-
42 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;-
43 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)-
44 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,-
45 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)-
46 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED-
47 * OF THE POSSIBILITY OF SUCH DAMAGE.-
48 * ====================================================================-
49 *-
50 * This product includes cryptographic software written by Eric Young-
51 * (eay@cryptsoft.com). This product includes software written by Tim-
52 * Hudson (tjh@cryptsoft.com).-
53 *-
54 */-
55-
56#include <openssl/err.h>-
57-
58#include "eng_int.h"-
59-
60/* Initialise a engine type for use (or up its functional reference count-
61 * if it's already in use). This version is only used internally. */-
62int-
63engine_unlocked_init(ENGINE *e)-
64{-
65 int to_return = 1;-
66-
67 if ((e->funct_ref == 0) && e->init)
(e->funct_ref == 0)Description
TRUEnever evaluated
FALSEnever evaluated
e->initDescription
TRUEnever evaluated
FALSEnever evaluated
0
68 /* This is the first functional reference and the engine-
69 * requires initialisation so we do it now. */-
70 to_return = e->init(e);
never executed: to_return = e->init(e);
0
71 if (to_return) {
to_returnDescription
TRUEnever evaluated
FALSEnever evaluated
0
72 /* OK, we return a functional reference which is also a-
73 * structural reference. */-
74 e->struct_ref++;-
75 e->funct_ref++;-
76 engine_ref_debug(e, 0, 1)-
77 engine_ref_debug(e, 1, 1)-
78 }
never executed: end of block
0
79 return to_return;
never executed: return to_return;
0
80}-
81-
82/* Free a functional reference to a engine type. This version is only used-
83 * internally. */-
84int-
85engine_unlocked_finish(ENGINE *e, int unlock_for_handlers)-
86{-
87 int to_return = 1;-
88-
89 /* Reduce the functional reference count here so if it's the terminating-
90 * case, we can release the lock safely and call the finish() handler-
91 * without risk of a race. We get a race if we leave the count until-
92 * after and something else is calling "finish" at the same time --
93 * there's a chance that both threads will together take the count from-
94 * 2 to 0 without either calling finish(). */-
95 e->funct_ref--;-
96 engine_ref_debug(e, 1, -1);-
97 if ((e->funct_ref == 0) && e->finish) {
(e->funct_ref == 0)Description
TRUEnever evaluated
FALSEnever evaluated
e->finishDescription
TRUEnever evaluated
FALSEnever evaluated
0
98 if (unlock_for_handlers)
unlock_for_handlersDescription
TRUEnever evaluated
FALSEnever evaluated
0
99 CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE);
never executed: CRYPTO_lock(2|8,30,__FILE__,99);
0
100 to_return = e->finish(e);-
101 if (unlock_for_handlers)
unlock_for_handlersDescription
TRUEnever evaluated
FALSEnever evaluated
0
102 CRYPTO_w_lock(CRYPTO_LOCK_ENGINE);
never executed: CRYPTO_lock(1|8,30,__FILE__,102);
0
103 if (!to_return)
!to_returnDescription
TRUEnever evaluated
FALSEnever evaluated
0
104 return 0;
never executed: return 0;
0
105 }
never executed: end of block
0
106-
107 /* Release the structural reference too */-
108 if (!engine_free_util(e, 0)) {
!engine_free_util(e, 0)Description
TRUEnever evaluated
FALSEnever evaluated
0
109 ENGINEerror(ENGINE_R_FINISH_FAILED);-
110 return 0;
never executed: return 0;
0
111 }-
112 return to_return;
never executed: return to_return;
0
113}-
114-
115/* The API (locked) version of "init" */-
116int-
117ENGINE_init(ENGINE *e)-
118{-
119 int ret;-
120-
121 if (e == NULL) {
e == ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
122 ENGINEerror(ERR_R_PASSED_NULL_PARAMETER);-
123 return 0;
never executed: return 0;
0
124 }-
125 CRYPTO_w_lock(CRYPTO_LOCK_ENGINE);-
126 ret = engine_unlocked_init(e);-
127 CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE);-
128 return ret;
never executed: return ret;
0
129}-
130-
131/* The API (locked) version of "finish" */-
132int-
133ENGINE_finish(ENGINE *e)-
134{-
135 int to_return = 1;-
136-
137 if (e == NULL)
e == ((void *)0)Description
TRUEevaluated 477998 times by 33 tests
Evaluated by:
  • asn1test
  • cipher_list
  • cipherstest
  • clienttest
  • configtest
  • dhtest
  • dsatest
  • ecdhtest
  • ecdsatest
  • evptest
  • gost2814789t
  • hkdftest
  • hmactest
  • keypairtest
  • libcrypto.so.44.0.1
  • md4test
  • md5test
  • mont
  • pbkdf2
  • pkcs7test
  • rmdtest
  • rsa_test
  • servertest
  • sha1test
  • sha256test
  • ...
FALSEnever evaluated
0-477998
138 return 1;
executed 477998 times by 33 tests: return 1;
Executed by:
  • asn1test
  • cipher_list
  • cipherstest
  • clienttest
  • configtest
  • dhtest
  • dsatest
  • ecdhtest
  • ecdsatest
  • evptest
  • gost2814789t
  • hkdftest
  • hmactest
  • keypairtest
  • libcrypto.so.44.0.1
  • md4test
  • md5test
  • mont
  • pbkdf2
  • pkcs7test
  • rmdtest
  • rsa_test
  • servertest
  • sha1test
  • sha256test
  • ...
477998
139 CRYPTO_w_lock(CRYPTO_LOCK_ENGINE);-
140 to_return = engine_unlocked_finish(e, 1);-
141 CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE);-
142 if (!to_return) {
!to_returnDescription
TRUEnever evaluated
FALSEnever evaluated
0
143 ENGINEerror(ENGINE_R_FINISH_FAILED);-
144 return 0;
never executed: return 0;
0
145 }-
146 return to_return;
never executed: return to_return;
0
147}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2