提交 a535fe12 编写于 作者: D Dr. Stephen Henson

Remove check_defer()

The check_defer() function was used to ensure that EVP_cleanup() was always
called before OBJ_cleanup(). The new cleanup code ensures this so it is
no longer needed.

Remove obj_cleanup() call in OID config module: it is not needed
any more either.
Reviewed-by: NMatt Caswell <matt@openssl.org>
上级 7e74eaa6
...@@ -93,7 +93,6 @@ static int oid_module_init(CONF_IMODULE *md, const CONF *cnf) ...@@ -93,7 +93,6 @@ static int oid_module_init(CONF_IMODULE *md, const CONF *cnf)
static void oid_module_finish(CONF_IMODULE *md) static void oid_module_finish(CONF_IMODULE *md)
{ {
obj_cleanup_int();
} }
void ASN1_add_oid_module(void) void ASN1_add_oid_module(void)
......
...@@ -73,7 +73,6 @@ int EVP_add_cipher(const EVP_CIPHER *c) ...@@ -73,7 +73,6 @@ int EVP_add_cipher(const EVP_CIPHER *c)
(const char *)c); (const char *)c);
if (r == 0) if (r == 0)
return (0); return (0);
check_defer(c->nid);
r = OBJ_NAME_add(OBJ_nid2ln(c->nid), OBJ_NAME_TYPE_CIPHER_METH, r = OBJ_NAME_add(OBJ_nid2ln(c->nid), OBJ_NAME_TYPE_CIPHER_METH,
(const char *)c); (const char *)c);
return (r); return (r);
...@@ -88,7 +87,6 @@ int EVP_add_digest(const EVP_MD *md) ...@@ -88,7 +87,6 @@ int EVP_add_digest(const EVP_MD *md)
r = OBJ_NAME_add(name, OBJ_NAME_TYPE_MD_METH, (const char *)md); r = OBJ_NAME_add(name, OBJ_NAME_TYPE_MD_METH, (const char *)md);
if (r == 0) if (r == 0)
return (0); return (0);
check_defer(md->type);
r = OBJ_NAME_add(OBJ_nid2ln(md->type), OBJ_NAME_TYPE_MD_METH, r = OBJ_NAME_add(OBJ_nid2ln(md->type), OBJ_NAME_TYPE_MD_METH,
(const char *)md); (const char *)md);
if (r == 0) if (r == 0)
...@@ -99,7 +97,6 @@ int EVP_add_digest(const EVP_MD *md) ...@@ -99,7 +97,6 @@ int EVP_add_digest(const EVP_MD *md)
OBJ_NAME_TYPE_MD_METH | OBJ_NAME_ALIAS, name); OBJ_NAME_TYPE_MD_METH | OBJ_NAME_ALIAS, name);
if (r == 0) if (r == 0)
return (0); return (0);
check_defer(md->pkey_type);
r = OBJ_NAME_add(OBJ_nid2ln(md->pkey_type), r = OBJ_NAME_add(OBJ_nid2ln(md->pkey_type),
OBJ_NAME_TYPE_MD_METH | OBJ_NAME_ALIAS, name); OBJ_NAME_TYPE_MD_METH | OBJ_NAME_ALIAS, name);
} }
...@@ -140,10 +137,6 @@ void evp_cleanup_int(void) ...@@ -140,10 +137,6 @@ void evp_cleanup_int(void)
OBJ_NAME_cleanup(-1); OBJ_NAME_cleanup(-1);
EVP_PBE_cleanup(); EVP_PBE_cleanup();
if (obj_cleanup_defer == 2) {
obj_cleanup_defer = 0;
obj_cleanup_int();
}
OBJ_sigid_free(); OBJ_sigid_free();
} }
......
...@@ -474,12 +474,14 @@ void OPENSSL_cleanup(void) ...@@ -474,12 +474,14 @@ void OPENSSL_cleanup(void)
#endif #endif
/* /*
* Note that cleanup order is important: * Note that cleanup order is important:
* - rand_cleanup_int could call an ENINGE's RAND cleanup function so * - rand_cleanup_int could call an ENGINE's RAND cleanup function so
* must be called before engine_cleanup_int() * must be called before engine_cleanup_int()
* - ENGINEs use CRYPTO_EX_DATA and therefore, must be cleaned up * - ENGINEs use CRYPTO_EX_DATA and therefore, must be cleaned up
* before the ex data handlers are wiped in CRYPTO_cleanup_all_ex_data(). * before the ex data handlers are wiped in CRYPTO_cleanup_all_ex_data().
* - conf_modules_free_int() can end up in ENGINE code so must be called * - conf_modules_free_int() can end up in ENGINE code so must be called
* before engine_cleanup_int() * before engine_cleanup_int()
* - ENGINEs and additional EVP algorithms might use added OIDs names so
* obj_cleanup_int() must be called last
*/ */
rand_cleanup_int(); rand_cleanup_int();
conf_modules_free_int(); conf_modules_free_int();
......
...@@ -198,24 +198,8 @@ static void cleanup3_doall(ADDED_OBJ *a) ...@@ -198,24 +198,8 @@ static void cleanup3_doall(ADDED_OBJ *a)
OPENSSL_free(a); OPENSSL_free(a);
} }
/*
* The purpose of obj_cleanup_defer is to avoid int_evp_cleanup() attempting
* to use freed up OIDs. If necessary the actual freeing up of OIDs is delayed.
*/
int obj_cleanup_defer = 0;
void check_defer(int nid)
{
if (!obj_cleanup_defer && nid >= NUM_NID)
obj_cleanup_defer = 1;
}
void obj_cleanup_int(void) void obj_cleanup_int(void)
{ {
if (obj_cleanup_defer) {
obj_cleanup_defer = 2;
return;
}
if (added == NULL) if (added == NULL)
return; return;
lh_ADDED_OBJ_set_down_load(added, 0); lh_ADDED_OBJ_set_down_load(added, 0);
......
...@@ -1116,9 +1116,6 @@ int OBJ_find_sigid_by_algs(int *psignid, int dig_nid, int pkey_nid); ...@@ -1116,9 +1116,6 @@ int OBJ_find_sigid_by_algs(int *psignid, int dig_nid, int pkey_nid);
int OBJ_add_sigid(int signid, int dig_id, int pkey_id); int OBJ_add_sigid(int signid, int dig_id, int pkey_id);
void OBJ_sigid_free(void); void OBJ_sigid_free(void);
extern int obj_cleanup_defer;
void check_defer(int nid);
/* BEGIN ERROR CODES */ /* BEGIN ERROR CODES */
/* /*
* The following lines are auto generated by the script mkerr.pl. Any changes * The following lines are auto generated by the script mkerr.pl. Any changes
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册