Don't leak memory on failure to create a mem BIO
authorMatt Caswell <matt@openssl.org>
Wed, 27 Apr 2016 11:52:29 +0000 (12:52 +0100)
committerMatt Caswell <matt@openssl.org>
Thu, 28 Apr 2016 12:13:09 +0000 (13:13 +0100)
During construction of a mem BIO we allocate some resources. If this
allocation fails we can end up leaking everything we have allocated so
far.

Reviewed-by: Richard Levitte <levitte@openssl.org>
crypto/bio/bss_mem.c

index 46bd0343d547bae2e564fa7096a1da32438465d4..3b6f1734adb9226469fe658af5a653ce77955fc6 100644 (file)
@@ -150,17 +150,22 @@ static int mem_init(BIO *bi, unsigned long flags)
     BIO_BUF_MEM *bb = OPENSSL_zalloc(sizeof(*bb));
 
     if (bb == NULL)
-        return(0);
-    if ((bb->buf = BUF_MEM_new_ex(flags)) == NULL)
-        return(0);
-    if ((bb->readp = OPENSSL_zalloc(sizeof(*bb->readp))) == NULL)
-        return(0);
+        return 0;
+    if ((bb->buf = BUF_MEM_new_ex(flags)) == NULL) {
+        OPENSSL_free(bb);
+        return 0;
+    }
+    if ((bb->readp = OPENSSL_zalloc(sizeof(*bb->readp))) == NULL) {
+        BUF_MEM_free(bb->buf);
+        OPENSSL_free(bb);
+        return 0;
+    }
     *bb->readp = *bb->buf;
     bi->shutdown = 1;
     bi->init = 1;
     bi->num = -1;
     bi->ptr = (char *)bb;
-    return(1);
+    return 1;
 }
 
 static int mem_new(BIO *bi)