summaryrefslogtreecommitdiffstats
path: root/providers
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 /providers
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 'providers')
-rw-r--r--providers/fips/fipsprov.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/providers/fips/fipsprov.c b/providers/fips/fipsprov.c
index cf4181dd2a..eeb1b1e1cf 100644
--- a/providers/fips/fipsprov.c
+++ b/providers/fips/fipsprov.c
@@ -54,6 +54,9 @@ OSSL_core_thread_start_fn *c_thread_start;
static OSSL_core_new_error_fn *c_new_error;
static OSSL_core_set_error_debug_fn *c_set_error_debug;
static OSSL_core_vset_error_fn *c_vset_error;
+static OSSL_core_set_error_mark_fn *c_set_error_mark;
+static OSSL_core_clear_last_error_mark_fn *c_clear_last_error_mark;
+static OSSL_core_pop_error_to_mark_fn *c_pop_error_to_mark;
static OSSL_CRYPTO_malloc_fn *c_CRYPTO_malloc;
static OSSL_CRYPTO_zalloc_fn *c_CRYPTO_zalloc;
static OSSL_CRYPTO_free_fn *c_CRYPTO_free;
@@ -675,6 +678,15 @@ int OSSL_provider_init(const OSSL_PROVIDER *provider,
case OSSL_FUNC_CORE_VSET_ERROR:
c_vset_error = OSSL_get_core_vset_error(in);
break;
+ case OSSL_FUNC_CORE_SET_ERROR_MARK:
+ c_set_error_mark = OSSL_get_core_set_error_mark(in);
+ break;
+ case OSSL_FUNC_CORE_CLEAR_LAST_ERROR_MARK:
+ c_clear_last_error_mark = OSSL_get_core_clear_last_error_mark(in);
+ break;
+ case OSSL_FUNC_CORE_POP_ERROR_TO_MARK:
+ c_pop_error_to_mark = OSSL_get_core_pop_error_to_mark(in);
+ break;
case OSSL_FUNC_CRYPTO_MALLOC:
c_CRYPTO_malloc = OSSL_get_CRYPTO_malloc(in);
break;
@@ -839,6 +851,21 @@ void ERR_vset_error(int lib, int reason, const char *fmt, va_list args)
c_vset_error(NULL, ERR_PACK(lib, 0, reason), fmt, args);
}
+int ERR_set_mark(void)
+{
+ return c_set_error_mark(NULL);
+}
+
+int ERR_clear_last_mark(void)
+{
+ return c_clear_last_error_mark(NULL);
+}
+
+int ERR_pop_to_mark(void)
+{
+ return c_pop_error_to_mark(NULL);
+}
+
const OSSL_PROVIDER *FIPS_get_provider(OPENSSL_CTX *ctx)
{
FIPS_GLOBAL *fgbl = openssl_ctx_get_data(ctx, OPENSSL_CTX_FIPS_PROV_INDEX,