EVP_PKEY_asn1_add0(): Check that this method isn't already registered
authorRichard Levitte <levitte@openssl.org>
Fri, 27 Oct 2017 20:42:04 +0000 (22:42 +0200)
committerRichard Levitte <levitte@openssl.org>
Mon, 30 Oct 2017 17:21:13 +0000 (18:21 +0100)
No two public key ASN.1 methods with the same pkey_id can be
registered at the same time.

Reviewed-by: Bernd Edlinger <bernd.edlinger@hotmail.de>
(Merged from https://github.com/openssl/openssl/pull/4596)

crypto/asn1/ameth_lib.c

index 5f523b2969e916bac15585bf08bc060dee4a96c6..87a3eba14aa9629a43ac19a61a87c6c1d43fd8ae 100644 (file)
@@ -137,6 +137,11 @@ const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find_str(ENGINE **pe,
 
 int EVP_PKEY_asn1_add0(const EVP_PKEY_ASN1_METHOD *ameth)
 {
 
 int EVP_PKEY_asn1_add0(const EVP_PKEY_ASN1_METHOD *ameth)
 {
+    if (pkey_asn1_find(ameth->pkey_id) != NULL) {
+        EVPerr(EVP_F_EVP_PKEY_ASN1_ADD0,
+               EVP_R_PKEY_ASN1_METHOD_ALREADY_REGISTERED);
+        return 0;
+    }
     if (app_methods == NULL) {
         app_methods = sk_EVP_PKEY_ASN1_METHOD_new(ameth_cmp);
         if (app_methods == NULL)
     if (app_methods == NULL) {
         app_methods = sk_EVP_PKEY_ASN1_METHOD_new(ameth_cmp);
         if (app_methods == NULL)