* https://www.openssl.org/source/license.html
*/
-/* TODO: When ERR_STATE becomes opaque, this musts be removed */
#define OSSL_FORCE_ERR_STATE
#include <stdio.h>
{0, NULL},
};
+/*
+ * Should make sure that all ERR_R_ reasons defined in include/openssl/err.h.in
+ * are listed. For maintainability, please keep all reasons in the same order.
+ */
static ERR_STRING_DATA ERR_str_reasons[] = {
{ERR_R_SYS_LIB, "system lib"},
{ERR_R_BN_LIB, "BN lib"},
{ERR_R_DSA_LIB, "DSA lib"},
{ERR_R_X509_LIB, "X509 lib"},
{ERR_R_ASN1_LIB, "ASN1 lib"},
+ {ERR_R_CRYPTO_LIB, "CRYPTO lib"},
{ERR_R_EC_LIB, "EC lib"},
{ERR_R_BIO_LIB, "BIO lib"},
{ERR_R_PKCS7_LIB, "PKCS7 lib"},
{ERR_R_X509V3_LIB, "X509V3 lib"},
{ERR_R_ENGINE_LIB, "ENGINE lib"},
{ERR_R_UI_LIB, "UI lib"},
- {ERR_R_OSSL_STORE_LIB, "STORE lib"},
{ERR_R_ECDSA_LIB, "ECDSA lib"},
-
- {ERR_R_NESTED_ASN1_ERROR, "nested asn1 error"},
- {ERR_R_MISSING_ASN1_EOS, "missing asn1 eos"},
+ {ERR_R_OSSL_STORE_LIB, "OSSL_STORE lib"},
+ {ERR_R_OSSL_DECODER_LIB, "OSSL_DECODER lib"},
{ERR_R_FATAL, "fatal"},
{ERR_R_MALLOC_FAILURE, "malloc failure"},
{ERR_R_INTERNAL_ERROR, "internal error"},
{ERR_R_DISABLED, "called a function that was disabled at compile-time"},
{ERR_R_INIT_FAIL, "init fail"},
+ {ERR_R_PASSED_INVALID_ARGUMENT, "passed invalid argument"},
{ERR_R_OPERATION_FAIL, "operation fail"},
{ERR_R_INVALID_PROVIDER_FUNCTIONS, "invalid provider functions"},
{ERR_R_INTERRUPTED_OR_CANCELLED, "interrupted or cancelled"},
-
+ {ERR_R_NESTED_ASN1_ERROR, "nested asn1 error"},
+ {ERR_R_MISSING_ASN1_EOS, "missing asn1 eos"},
/*
* Something is unsupported, exactly what is expressed with additional data
*/
* unsupported.
*/
{ERR_R_FETCH_FAILED, "fetch failed"},
+ {ERR_R_INVALID_PROPERTY_DEFINITION, "invalid property definition"},
+ {ERR_R_UNABLE_TO_GET_READ_LOCK, "unable to get read lock"},
+ {ERR_R_UNABLE_TO_GET_WRITE_LOCK, "unable to get write lock"},
{0, NULL},
};
#endif
{
ERR_STRING_DATA *p = NULL;
- CRYPTO_THREAD_read_lock(err_string_lock);
+ if (!CRYPTO_THREAD_read_lock(err_string_lock))
+ return NULL;
p = lh_ERR_STRING_DATA_retrieve(int_error_hash, d);
CRYPTO_THREAD_unlock(err_string_lock);
*/
static int err_load_strings(const ERR_STRING_DATA *str)
{
- CRYPTO_THREAD_write_lock(err_string_lock);
+ if (!CRYPTO_THREAD_write_lock(err_string_lock))
+ return 0;
for (; str->error; str++)
(void)lh_ERR_STRING_DATA_insert(int_error_hash,
(ERR_STRING_DATA *)str);
return 1;
}
-int err_load_ERR_strings_int(void)
+int ossl_err_load_ERR_strings(void)
{
#ifndef OPENSSL_NO_ERR
if (!RUN_ONCE(&err_string_init, do_err_strings_init))
int ERR_load_strings(int lib, ERR_STRING_DATA *str)
{
- if (err_load_ERR_strings_int() == 0)
+ if (ossl_err_load_ERR_strings() == 0)
return 0;
err_patch(lib, str);
int ERR_load_strings_const(const ERR_STRING_DATA *str)
{
- if (err_load_ERR_strings_int() == 0)
+ if (ossl_err_load_ERR_strings() == 0)
return 0;
err_load_strings(str);
return 1;
if (!RUN_ONCE(&err_string_init, do_err_strings_init))
return 0;
- CRYPTO_THREAD_write_lock(err_string_lock);
+ if (!CRYPTO_THREAD_write_lock(err_string_lock))
+ return 0;
/*
* We don't need to ERR_PACK the lib, since that was done (to
* the table) when it was loaded.
int i;
ERR_STATE *es;
- es = err_get_state_int();
+ es = ossl_err_get_state_int();
if (es == NULL)
return;
ERR_STATE *es;
unsigned long ret;
- es = err_get_state_int();
+ es = ossl_err_get_state_int();
if (es == NULL)
return 0;
}
#endif
if (rs == NULL) {
- BIO_snprintf(rsbuf, sizeof(rsbuf), "reason(%lu)", r);
+ BIO_snprintf(rsbuf, sizeof(rsbuf), "reason(%lu)",
+ r & ~(ERR_RFLAGS_MASK << ERR_RFLAGS_OFFSET));
rs = rsbuf;
}
return CRYPTO_THREAD_init_local(&err_thread_local, NULL);
}
-ERR_STATE *err_get_state_int(void)
+ERR_STATE *ossl_err_get_state_int(void)
{
ERR_STATE *state;
int saveerrno = get_last_sys_error();
#ifndef OPENSSL_NO_DEPRECATED_3_0
ERR_STATE *ERR_get_state(void)
{
- return err_get_state_int();
+ return ossl_err_get_state_int();
}
#endif
if (!RUN_ONCE(&err_string_init, do_err_strings_init))
return 0;
- CRYPTO_THREAD_write_lock(err_string_lock);
+ if (!CRYPTO_THREAD_write_lock(err_string_lock))
+ return 0;
ret = int_err_library_number++;
CRYPTO_THREAD_unlock(err_string_lock);
return ret;
{
ERR_STATE *es;
- es = err_get_state_int();
+ es = ossl_err_get_state_int();
if (es == NULL)
return 0;
ERR_STATE *es;
/* Get the current error data; if an allocated string get it. */
- es = err_get_state_int();
+ es = ossl_err_get_state_int();
if (es == NULL)
return;
i = es->top;
OPENSSL_free(str);
}
-int ERR_set_mark(void)
-{
- ERR_STATE *es;
-
- es = err_get_state_int();
- if (es == NULL)
- return 0;
-
- if (es->bottom == es->top)
- return 0;
- es->err_marks[es->top]++;
- return 1;
-}
-
-int ERR_pop_to_mark(void)
-{
- ERR_STATE *es;
-
- es = err_get_state_int();
- if (es == NULL)
- return 0;
-
- while (es->bottom != es->top
- && es->err_marks[es->top] == 0) {
- err_clear(es, es->top, 0);
- es->top = es->top > 0 ? es->top - 1 : ERR_NUM_ERRORS - 1;
- }
-
- if (es->bottom == es->top)
- return 0;
- es->err_marks[es->top]--;
- return 1;
-}
-
-int ERR_clear_last_mark(void)
-{
- ERR_STATE *es;
- int top;
-
- es = err_get_state_int();
- if (es == NULL)
- return 0;
-
- top = es->top;
- while (es->bottom != top
- && es->err_marks[top] == 0) {
- top = top > 0 ? top - 1 : ERR_NUM_ERRORS - 1;
- }
-
- if (es->bottom == top)
- return 0;
- es->err_marks[top]--;
- return 1;
-}
-
void err_clear_last_constant_time(int clear)
{
ERR_STATE *es;
int top;
- es = err_get_state_int();
+ es = ossl_err_get_state_int();
if (es == NULL)
return;