Fix BIO_push ref counting for SSL BIO
authorMatt Caswell <matt@openssl.org>
Thu, 21 Jul 2016 09:48:12 +0000 (10:48 +0100)
committerMatt Caswell <matt@openssl.org>
Fri, 29 Jul 2016 13:09:57 +0000 (14:09 +0100)
When pushing a BIO onto an SSL BIO we set the rbio and wbio for the SSL
object to be the BIO that has been pushed. Therefore we need to up the ref
count for that BIO. The existing code was uping the ref count on the wrong
BIO.

Reviewed-by: Rich Salz <rsalz@openssl.org>
ssl/bio_ssl.c

index efe0df98fba5bc74e50f72ea566e19c9417f9c84..5212a7b239e445284cdafd39069c542602503723 100644 (file)
@@ -327,8 +327,12 @@ static long ssl_ctrl(BIO *b, int cmd, long num, void *ptr)
         break;
     case BIO_CTRL_PUSH:
         if ((next != NULL) && (next != ssl->rbio)) {
+            /*
+             * We are going to pass ownership of next to the SSL object...but
+             * we don't own a reference to pass yet - so up ref
+             */
+            BIO_up_ref(next);
             SSL_set_bio(ssl, next, next);
-            BIO_up_ref(b);
         }
         break;
     case BIO_CTRL_POP: