Fix a possible memory leak in engine_table_register
authorBernd Edlinger <bernd.edlinger@hotmail.de>
Fri, 2 Mar 2018 08:27:39 +0000 (09:27 +0100)
committerBernd Edlinger <bernd.edlinger@hotmail.de>
Sat, 3 Mar 2018 18:58:18 +0000 (19:58 +0100)
Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/5489)

crypto/engine/eng_table.c

index 219253a..ffdecb9 100644 (file)
@@ -109,6 +109,11 @@ int engine_table_register(ENGINE_TABLE **table, ENGINE_CLEANUP_CB *cleanup,
             }
             fnd->funct = NULL;
             (void)lh_ENGINE_PILE_insert(&(*table)->piles, fnd);
+            if (lh_ENGINE_PILE_retrieve(&(*table)->piles, &tmplate) != fnd) {
+                sk_ENGINE_free(fnd->sk);
+                OPENSSL_free(fnd);
+                goto end;
+            }
         }
         /* A registration shouldn't add duplicate entries */
         (void)sk_ENGINE_delete_ptr(fnd->sk, e);