summaryrefslogtreecommitdiffstats
path: root/crypto
diff options
context:
space:
mode:
authorAaron Thompson <dev@aaront.org>2020-04-11 00:56:15 +0000
committerDmitry Belyavskiy <beldmit@gmail.com>2020-06-04 17:39:51 +0300
commit4cbb196b1b33d6ff2089537df0fdb76ac4741e2a (patch)
tree10b87da08c09c9d64a5acd152c330aaa71a76a69 /crypto
parentc2db6839e474e655974292690b18e22c39d093ae (diff)
Fix missed fields in EVP_PKEY_meth_copy.
Reviewed-by: Matt Caswell <matt@openssl.org> Reviewed-by: Dmitry Belyavskiy <beldmit@gmail.com> (Merged from https://github.com/openssl/openssl/pull/11514)
Diffstat (limited to 'crypto')
-rw-r--r--crypto/evp/pmeth_lib.c43
1 files changed, 6 insertions, 37 deletions
diff --git a/crypto/evp/pmeth_lib.c b/crypto/evp/pmeth_lib.c
index ea8bdec388..dd6556c891 100644
--- a/crypto/evp/pmeth_lib.c
+++ b/crypto/evp/pmeth_lib.c
@@ -385,45 +385,14 @@ void EVP_PKEY_meth_get0_info(int *ppkey_id, int *pflags,
void EVP_PKEY_meth_copy(EVP_PKEY_METHOD *dst, const EVP_PKEY_METHOD *src)
{
+ int pkey_id = dst->pkey_id;
+ int flags = dst->flags;
- dst->init = src->init;
- dst->copy = src->copy;
- dst->cleanup = src->cleanup;
+ *dst = *src;
- dst->paramgen_init = src->paramgen_init;
- dst->paramgen = src->paramgen;
-
- dst->keygen_init = src->keygen_init;
- dst->keygen = src->keygen;
-
- dst->sign_init = src->sign_init;
- dst->sign = src->sign;
-
- dst->verify_init = src->verify_init;
- dst->verify = src->verify;
-
- dst->verify_recover_init = src->verify_recover_init;
- dst->verify_recover = src->verify_recover;
-
- dst->signctx_init = src->signctx_init;
- dst->signctx = src->signctx;
-
- dst->verifyctx_init = src->verifyctx_init;
- dst->verifyctx = src->verifyctx;
-
- dst->encrypt_init = src->encrypt_init;
- dst->encrypt = src->encrypt;
-
- dst->decrypt_init = src->decrypt_init;
- dst->decrypt = src->decrypt;
-
- dst->derive_init = src->derive_init;
- dst->derive = src->derive;
-
- dst->ctrl = src->ctrl;
- dst->ctrl_str = src->ctrl_str;
-
- dst->check = src->check;
+ /* We only copy the function pointers so restore the other values */
+ dst->pkey_id = pkey_id;
+ dst->flags = flags;
}
void EVP_PKEY_meth_free(EVP_PKEY_METHOD *pmeth)