Don't load GOST ENGINE if it is already loaded.
authorDr. Stephen Henson <steve@openssl.org>
Sat, 1 Sep 2012 11:30:53 +0000 (11:30 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Sat, 1 Sep 2012 11:30:53 +0000 (11:30 +0000)
Multiple copies of the ENGINE will cause problems when it is cleaned up as
the methods are stored in static structures which will be overwritten and
freed up more than once.

Set static methods to NULL when the ENGINE is freed so it can be reloaded.

engines/ccgost/gost_eng.c

index d2cbe3b83140c496f1bef7baab8d31cc855df4c4..ebf0b625b5b316aba7b0f38f4ebe833d10f04f83 100644 (file)
@@ -64,6 +64,13 @@ static int gost_engine_finish(ENGINE *e)
 static int gost_engine_destroy(ENGINE *e)
        { 
        gost_param_free();
+
+       pmeth_GostR3410_94 = NULL;
+       pmeth_GostR3410_2001 = NULL;
+       pmeth_Gost28147_MAC = NULL;
+       ameth_GostR3410_94 = NULL;
+       ameth_GostR3410_2001 = NULL;
+       ameth_Gost28147_MAC = NULL;
        return 1;
        }
 
@@ -263,7 +270,10 @@ static ENGINE *engine_gost(void)
        
 void ENGINE_load_gost(void)
        {
-       ENGINE *toadd =engine_gost();
+       ENGINE *toadd;
+       if (pmeth_GostR3410_94)
+               return;
+       toadd = engine_gost();
        if (!toadd) return;
        ENGINE_add(toadd);
        ENGINE_free(toadd);