summaryrefslogtreecommitdiffstats
path: root/crypto/provider_core.c
diff options
context:
space:
mode:
authorRichard Levitte <levitte@openssl.org>2020-01-15 14:09:54 +0100
committerRichard Levitte <levitte@openssl.org>2020-01-21 14:06:54 +0100
commit7b131de2bb2be8582c6dfc50bdd3cbc49e1a08be (patch)
tree1465d32d6986b8f16dcc13471066778740da4e86 /crypto/provider_core.c
parent0b9dd3842f9bbe7a7c290187056a96827d848f52 (diff)
PROV: Add support for error queue marks and implement in FIPS module
This propagates ERR_set_mark(), and ERR_clear_last_mark() and ERR_pop_to_mark() for provider use. Reviewed-by: Nicola Tuveri <nic.tuv@gmail.com> (Merged from https://github.com/openssl/openssl/pull/10803)
Diffstat (limited to 'crypto/provider_core.c')
-rw-r--r--crypto/provider_core.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/crypto/provider_core.c b/crypto/provider_core.c
index 2f2d69a0c3..cac325407f 100644
--- a/crypto/provider_core.c
+++ b/crypto/provider_core.c
@@ -774,6 +774,9 @@ static OSSL_core_get_library_context_fn core_get_libctx;
static OSSL_core_new_error_fn core_new_error;
static OSSL_core_set_error_debug_fn core_set_error_debug;
static OSSL_core_vset_error_fn core_vset_error;
+static OSSL_core_set_error_mark_fn core_set_error_mark;
+static OSSL_core_clear_last_error_mark_fn core_clear_last_error_mark;
+static OSSL_core_pop_error_to_mark_fn core_pop_error_to_mark;
#endif
static const OSSL_PARAM *core_gettable_params(const OSSL_PROVIDER *prov)
@@ -857,6 +860,21 @@ static void core_vset_error(const OSSL_PROVIDER *prov,
ERR_vset_error(prov->error_lib, (int)reason, fmt, args);
}
}
+
+static int core_set_error_mark(const OSSL_PROVIDER *prov)
+{
+ return ERR_set_mark();
+}
+
+static int core_clear_last_error_mark(const OSSL_PROVIDER *prov)
+{
+ return ERR_clear_last_mark();
+}
+
+static int core_pop_error_to_mark(const OSSL_PROVIDER *prov)
+{
+ return ERR_pop_to_mark();
+}
#endif
/*
@@ -872,6 +890,11 @@ static const OSSL_DISPATCH core_dispatch_[] = {
{ OSSL_FUNC_CORE_NEW_ERROR, (void (*)(void))core_new_error },
{ OSSL_FUNC_CORE_SET_ERROR_DEBUG, (void (*)(void))core_set_error_debug },
{ OSSL_FUNC_CORE_VSET_ERROR, (void (*)(void))core_vset_error },
+ { OSSL_FUNC_CORE_SET_ERROR_MARK, (void (*)(void))core_set_error_mark },
+ { OSSL_FUNC_CORE_CLEAR_LAST_ERROR_MARK,
+ (void (*)(void))core_clear_last_error_mark },
+ { OSSL_FUNC_CORE_POP_ERROR_TO_MARK,
+ (void (*)(void))core_pop_error_to_mark },
{ OSSL_FUNC_BIO_NEW_FILE, (void (*)(void))BIO_new_file },
{ OSSL_FUNC_BIO_NEW_MEMBUF, (void (*)(void))BIO_new_mem_buf },
{ OSSL_FUNC_BIO_READ_EX, (void (*)(void))BIO_read_ex },