From: Rich Salz Date: Thu, 16 Feb 2017 16:13:47 +0000 (-0500) Subject: Get pointer type right in BIO_ssl_shutdown() X-Git-Tag: OpenSSL_1_1_0f~173 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=51800912006b2b09ed61607842fce8dbb2f44a9c;p=oweals%2Fopenssl.git Get pointer type right in BIO_ssl_shutdown() Also, restore 1.0.2 behavior of looping over all BIO's in the chain. Thanks to Joseph Bester for finding this and suggesting a fix to the crash. Reviewed-by: Tim Hudson (Merged from https://github.com/openssl/openssl/pull/2651) (cherry picked from commit 9015d34e141af747f7c750f8d08f862b2a8273c7) --- diff --git a/ssl/bio_ssl.c b/ssl/bio_ssl.c index 3dd09cf52d..5322c03646 100644 --- a/ssl/bio_ssl.c +++ b/ssl/bio_ssl.c @@ -517,12 +517,13 @@ int BIO_ssl_copy_session_id(BIO *t, BIO *f) void BIO_ssl_shutdown(BIO *b) { - SSL *s; - - b = BIO_find_type(b, BIO_TYPE_SSL); - if (b == NULL) - return; - - s = BIO_get_data(b); - SSL_shutdown(s); + BIO_SSL *bdata; + + for (; b != NULL; b = BIO_next(b)) { + if (BIO_method_type(b) != BIO_TYPE_SSL) + continue; + bdata = BIO_get_data(b); + if (bdata != NULL && bdata->ssl != NULL) + SSL_shutdown(bdata->ssl); + } }