summaryrefslogtreecommitdiffstats
path: root/crypto/core_algorithm.c
diff options
context:
space:
mode:
authorRichard Levitte <levitte@openssl.org>2020-07-03 14:12:54 +0200
committerRichard Levitte <levitte@openssl.org>2020-07-05 14:07:14 +0200
commitdd76b90ef6cf9bd344c9a6cd0de536a734d1b6a3 (patch)
tree466d4a6382ce4d58d975a9bc7d07134082793ae2 /crypto/core_algorithm.c
parent1dc1ea182be183d8a393fdce4494360aee059cd2 (diff)
CORE: perform post-condition in algorithm_do_this() under all circumstances
When ossl_provider_query_operation() returned NULL, the post-condition callback wasn't called, and could make algorithm_do_this() falsely tell the caller that there was an error. Because of this, a provider that answered with NULL for a particular operation identity would effectively block the same query on all following providers. Fixes #12293 Reviewed-by: Matt Caswell <matt@openssl.org> Reviewed-by: Shane Lontis <shane.lontis@oracle.com> (Merged from https://github.com/openssl/openssl/pull/12365)
Diffstat (limited to 'crypto/core_algorithm.c')
-rw-r--r--crypto/core_algorithm.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/crypto/core_algorithm.c b/crypto/core_algorithm.c
index b035ecfbb4..f4a20cb2d1 100644
--- a/crypto/core_algorithm.c
+++ b/crypto/core_algorithm.c
@@ -58,13 +58,12 @@ static int algorithm_do_this(OSSL_PROVIDER *provider, void *cbdata)
map = ossl_provider_query_operation(provider, cur_operation,
&no_store);
- if (map == NULL)
- continue;
-
- while (map->algorithm_names != NULL) {
- const OSSL_ALGORITHM *thismap = map++;
+ if (map != NULL) {
+ while (map->algorithm_names != NULL) {
+ const OSSL_ALGORITHM *thismap = map++;
- data->fn(provider, thismap, no_store, data->data);
+ data->fn(provider, thismap, no_store, data->data);
+ }
}
/* Do we fulfill post-conditions? */