From 7b8cc9b3458ec3f18b4d4d9ca2a72b6b3e3744c8 Mon Sep 17 00:00:00 2001 From: Matt Caswell Date: Mon, 4 Apr 2016 15:49:21 +0100 Subject: [PATCH] Deprecate OBJ_cleanup() and make it a no-op OBJ_cleanup() should not be called expicitly - we should leave auto-deinit to clean this up instead. Reviewed-by: Tim Hudson Reviewed-by: Richard Levitte --- apps/asn1pars.c | 1 - apps/ca.c | 1 - apps/req.c | 1 - apps/srp.c | 1 - apps/ts.c | 1 - apps/x509.c | 1 - crypto/asn1/asn_moid.c | 3 ++- crypto/evp/names.c | 4 ++-- crypto/include/internal/objects.h | 11 +++++++++++ crypto/init.c | 5 +++-- crypto/objects/obj_dat.c | 4 ++-- doc/crypto/OBJ_nid2obj.pod | 19 +++++++++++++------ include/openssl/objects.h | 4 +++- 13 files changed, 36 insertions(+), 20 deletions(-) create mode 100644 crypto/include/internal/objects.h diff --git a/apps/asn1pars.c b/apps/asn1pars.c index a6cc6397fa..3da7e3b4c5 100644 --- a/apps/asn1pars.c +++ b/apps/asn1pars.c @@ -327,7 +327,6 @@ int asn1parse_main(int argc, char **argv) OPENSSL_free(str); ASN1_TYPE_free(at); sk_OPENSSL_STRING_free(osk); - OBJ_cleanup(); return (ret); } diff --git a/apps/ca.c b/apps/ca.c index d2990a5673..95801fbf39 100644 --- a/apps/ca.c +++ b/apps/ca.c @@ -1307,7 +1307,6 @@ end_of_options: X509_CRL_free(crl); NCONF_free(conf); NCONF_free(extconf); - OBJ_cleanup(); return (ret); } diff --git a/apps/req.c b/apps/req.c index e3869bab19..7f4a946aaa 100644 --- a/apps/req.c +++ b/apps/req.c @@ -867,7 +867,6 @@ int req_main(int argc, char **argv) OPENSSL_free(passin); if (passout != nofree_passout) OPENSSL_free(passout); - OBJ_cleanup(); return (ret); } diff --git a/apps/srp.c b/apps/srp.c index 2c4d746f88..1bf2ee299a 100644 --- a/apps/srp.c +++ b/apps/srp.c @@ -653,7 +653,6 @@ int srp_main(int argc, char **argv) app_RAND_write_file(randfile); NCONF_free(conf); free_index(db); - OBJ_cleanup(); return (ret); } #endif diff --git a/apps/ts.c b/apps/ts.c index 44e6004c78..ec0cfa9d92 100644 --- a/apps/ts.c +++ b/apps/ts.c @@ -383,7 +383,6 @@ int ts_main(int argc, char **argv) app_RAND_write_file(NULL); NCONF_free(conf); OPENSSL_free(password); - OBJ_cleanup(); return (ret); } diff --git a/apps/x509.c b/apps/x509.c index 6ee26115ee..d8be179d43 100644 --- a/apps/x509.c +++ b/apps/x509.c @@ -919,7 +919,6 @@ int x509_main(int argc, char **argv) end: if (need_rand) app_RAND_write_file(NULL); - OBJ_cleanup(); NCONF_free(extconf); BIO_free_all(out); X509_STORE_free(ctx); diff --git a/crypto/asn1/asn_moid.c b/crypto/asn1/asn_moid.c index 8198874aa9..ded5d018b4 100644 --- a/crypto/asn1/asn_moid.c +++ b/crypto/asn1/asn_moid.c @@ -63,6 +63,7 @@ #include #include #include "internal/asn1_int.h" +#include "internal/objects.h" /* Simple ASN1 OID module: add all objects in a given section */ @@ -92,7 +93,7 @@ static int oid_module_init(CONF_IMODULE *md, const CONF *cnf) static void oid_module_finish(CONF_IMODULE *md) { - OBJ_cleanup(); + obj_cleanup_intern(); } void ASN1_add_oid_module(void) diff --git a/crypto/evp/names.c b/crypto/evp/names.c index 22c725d060..5ef52b43df 100644 --- a/crypto/evp/names.c +++ b/crypto/evp/names.c @@ -58,7 +58,7 @@ #include #include "internal/cryptlib.h" #include -#include +#include #include #include "internal/evp_int.h" @@ -142,7 +142,7 @@ void evp_cleanup_intern(void) EVP_PBE_cleanup(); if (obj_cleanup_defer == 2) { obj_cleanup_defer = 0; - OBJ_cleanup(); + obj_cleanup_intern(); } OBJ_sigid_free(); } diff --git a/crypto/include/internal/objects.h b/crypto/include/internal/objects.h new file mode 100644 index 0000000000..601294f3f2 --- /dev/null +++ b/crypto/include/internal/objects.h @@ -0,0 +1,11 @@ +/* + * Licensed under the OpenSSL licenses, (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * https://www.openssl.org/source/license.html + * or in the file LICENSE in the source distribution. + */ + +#include + +void obj_cleanup_intern(void); diff --git a/crypto/init.c b/crypto/init.c index dc24c02693..170d11b91c 100644 --- a/crypto/init.c +++ b/crypto/init.c @@ -67,6 +67,7 @@ #include #include #include +#include #include #include @@ -468,7 +469,7 @@ void OPENSSL_cleanup(void) fprintf(stderr, "OPENSSL_INIT: OPENSSL_cleanup: " "evp_cleanup_intern()\n"); fprintf(stderr, "OPENSSL_INIT: OPENSSL_cleanup: " - "OBJ_cleanup()\n"); + "obj_cleanup_intern()\n"); #endif /* * Note that cleanup order is important: @@ -489,7 +490,7 @@ void OPENSSL_cleanup(void) bio_sock_cleanup_intern(); #endif evp_cleanup_intern(); - OBJ_cleanup(); + obj_cleanup_intern(); base_inited = 0; } diff --git a/crypto/objects/obj_dat.c b/crypto/objects/obj_dat.c index 21b4187a25..90db56bbd8 100644 --- a/crypto/objects/obj_dat.c +++ b/crypto/objects/obj_dat.c @@ -61,7 +61,7 @@ #include "internal/cryptlib.h" #include #include -#include +#include "internal/objects.h" #include #include "internal/asn1_int.h" #include "obj_lcl.h" @@ -210,7 +210,7 @@ void check_defer(int nid) obj_cleanup_defer = 1; } -void OBJ_cleanup(void) +void obj_cleanup_intern(void) { if (obj_cleanup_defer) { obj_cleanup_defer = 2; diff --git a/doc/crypto/OBJ_nid2obj.pod b/doc/crypto/OBJ_nid2obj.pod index b2b815db65..2db96a132f 100644 --- a/doc/crypto/OBJ_nid2obj.pod +++ b/doc/crypto/OBJ_nid2obj.pod @@ -27,11 +27,16 @@ functions ASN1_OBJECT * OBJ_dup(const ASN1_OBJECT *o); int OBJ_create(const char *oid,const char *sn,const char *ln); - void OBJ_cleanup(void); size_t OBJ_length(const ASN1_OBJECT *obj); const unsigned char *OBJ_get0_data(const ASN1_OBJECT *obj); +Deprecated: + + #if OPENSSL_API_COMPAT < 0x10100000L + # define OBJ_cleanup() + #endif + =head1 DESCRIPTION The ASN1 object utility functions process ASN1_OBJECT structures which are @@ -69,15 +74,17 @@ OBJ_create() adds a new object to the internal table. B is the numerical form of the object, B the short name and B the long name. A new NID is returned for the created object. -OBJ_cleanup() cleans up OpenSSLs internal object table: this should -be called before an application exits if any new objects were added -using OBJ_create(). - OBJ_length() returns the size of the content octets of B. OBJ_get0_data() returns a pointer to the content octets of B. The returned pointer is an internal pointer which B be freed. +In OpenSSL versions prior to 1.1.0 OBJ_cleanup() cleaned up OpenSSLs internal +object table and was called before an application exits if any new objects were +added using OBJ_create(). This function is deprecated in version 1.1.0 and now +does nothing if called. No explicit de-initialisation is now required. See +L for further information. + =head1 NOTES Objects in OpenSSL can have a short name, a long name and a numerical @@ -160,6 +167,6 @@ L =head1 HISTORY -TBA +OBJ_cleanup() was deprecated in OpenSSL 1.1.0. =cut diff --git a/include/openssl/objects.h b/include/openssl/objects.h index 05bc9b0248..c61e49ea35 100644 --- a/include/openssl/objects.h +++ b/include/openssl/objects.h @@ -1103,7 +1103,9 @@ const void *OBJ_bsearch_ex_(const void *key, const void *base, int num, int OBJ_new_nid(int num); int OBJ_add_object(const ASN1_OBJECT *obj); int OBJ_create(const char *oid, const char *sn, const char *ln); -void OBJ_cleanup(void); +#if OPENSSL_API_COMPAT < 0x10100000L +# define OBJ_cleanup() +#endif int OBJ_create_objects(BIO *in); size_t OBJ_length(const ASN1_OBJECT *obj); -- 2.39.2