From 66ebbaac74a1f6f1960ea1049eb8e75ebbdf9782 Mon Sep 17 00:00:00 2001 From: Michal Trojnara Date: Fri, 28 Feb 2020 05:42:47 +0100 Subject: [PATCH] Revert "fix use-after-free on PKCS11_pkey_meths." This reverts commit e64496a198d4d2eb0310a22dc21be8b81367d319. --- src/p11_pkey.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/p11_pkey.c b/src/p11_pkey.c index 8df45abd..4ed98f65 100644 --- a/src/p11_pkey.c +++ b/src/p11_pkey.c @@ -673,8 +673,8 @@ int PKCS11_pkey_meths(ENGINE *e, EVP_PKEY_METHOD **pmeth, EVP_PKEY_EC, 0 }; - EVP_PKEY_METHOD *pkey_method_rsa = NULL; - EVP_PKEY_METHOD *pkey_method_ec = NULL; + static EVP_PKEY_METHOD *pkey_method_rsa = NULL; + static EVP_PKEY_METHOD *pkey_method_ec = NULL; (void)e; /* squash the unused parameter warning */ /* all PKCS#11 engines currently share the same pkey_meths */ @@ -687,14 +687,16 @@ int PKCS11_pkey_meths(ENGINE *e, EVP_PKEY_METHOD **pmeth, /* get the EVP_PKEY_METHOD */ switch (nid) { case EVP_PKEY_RSA: - pkey_method_rsa = pkcs11_pkey_method_rsa(); + if (!pkey_method_rsa) + pkey_method_rsa = pkcs11_pkey_method_rsa(); if (!pkey_method_rsa) return 0; *pmeth = pkey_method_rsa; return 1; /* success */ #ifndef OPENSSL_NO_EC case EVP_PKEY_EC: - pkey_method_ec = pkcs11_pkey_method_ec(); + if (!pkey_method_ec) + pkey_method_ec = pkcs11_pkey_method_ec(); if (!pkey_method_ec) return 0; *pmeth = pkey_method_ec;