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)
This commit is contained in:
Richard Levitte 2020-07-03 14:12:54 +02:00
parent 1dc1ea182b
commit dd76b90ef6

View File

@ -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;
if (map != NULL) {
while (map->algorithm_names != NULL) {
const OSSL_ALGORITHM *thismap = map++;
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? */