From: Matt Caswell Date: Fri, 15 Oct 2021 15:23:31 +0000 (+0100) Subject: Ensure pkey_set_type handles ENGINE references correctly X-Git-Tag: openssl-3.2.0-alpha1~3460 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f7d6868d0d48fedd5d9daad0c3e0cbcaef423ff3;p=thirdparty%2Fopenssl.git Ensure pkey_set_type handles ENGINE references correctly pkey_set_type should not consume the ENGINE references that may be passed to it. Fixes #16757 Reviewed-by: Tomas Mraz (Merged from https://github.com/openssl/openssl/pull/16846) --- diff --git a/crypto/evp/p_lib.c b/crypto/evp/p_lib.c index 61cfe1efb95..aabd92d5559 100644 --- a/crypto/evp/p_lib.c +++ b/crypto/evp/p_lib.c @@ -1554,7 +1554,6 @@ static int pkey_set_type(EVP_PKEY *pkey, ENGINE *e, int type, const char *str, */ if (keymgmt == NULL) pkey->ameth = ameth; - pkey->engine = e; /* * The EVP_PKEY_ASN1_METHOD |pkey_id| retains its legacy key purpose @@ -1570,6 +1569,13 @@ static int pkey_set_type(EVP_PKEY *pkey, ENGINE *e, int type, const char *str, } else { pkey->type = EVP_PKEY_KEYMGMT; } +# ifndef OPENSSL_NO_ENGINE + if (eptr == NULL && e != NULL && !ENGINE_init(e)) { + ERR_raise(ERR_LIB_EVP, EVP_R_INITIALIZATION_ERROR); + return 0; + } +# endif + pkey->engine = e; #endif } return 1;