From: FdaSilvaYY Date: Thu, 28 Apr 2016 18:13:44 +0000 (+0200) Subject: BIO_free should call method->destroy before free'ing member fields X-Git-Tag: OpenSSL_1_1_0-pre6~1014 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=a14a740dbecf112ed9de53fb90f34f2af871cda9;p=oweals%2Fopenssl.git BIO_free should call method->destroy before free'ing member fields Reviewed-by: Tim Hudson Reviewed-by: Richard Levitte (Merged from https://github.com/openssl/openssl/pull/1007) --- diff --git a/crypto/bio/bio_lib.c b/crypto/bio/bio_lib.c index 6ddc19fc9a..8f6848511e 100644 --- a/crypto/bio/bio_lib.c +++ b/crypto/bio/bio_lib.c @@ -98,6 +98,7 @@ int BIO_set(BIO *bio, const BIO_METHOD *method) bio->lock = CRYPTO_THREAD_lock_new(); if (bio->lock == NULL) { + BIOerr(BIO_F_BIO_SET, ERR_R_MALLOC_FAILURE); CRYPTO_free_ex_data(CRYPTO_EX_INDEX_BIO, bio, &bio->ex_data); return 0; } @@ -131,13 +132,13 @@ int BIO_free(BIO *a) ((i = (int)a->callback(a, BIO_CB_FREE, NULL, 0, 0L, 1L)) <= 0)) return i; + if ((a->method != NULL) && (a->method->destroy != NULL)) + a->method->destroy(a); + CRYPTO_free_ex_data(CRYPTO_EX_INDEX_BIO, a, &a->ex_data); CRYPTO_THREAD_lock_free(a->lock); - if ((a->method != NULL) && (a->method->destroy != NULL)) - a->method->destroy(a); - OPENSSL_free(a); return 1;