From 1d8c2b5d17c36de9739c947ea93d6c3ecf0f3d08 Mon Sep 17 00:00:00 2001
From: beck <>
Date: Thu, 17 Apr 2014 16:30:59 +0000
Subject: remove OPENSSL_realloc_clean usage here - replace with intrinsics to
 make it obvious what should happen. ok tedu@

---
 src/lib/libcrypto/buffer/buffer.c         | 11 +++++++----
 src/lib/libssl/src/crypto/buffer/buffer.c | 11 +++++++----
 2 files changed, 14 insertions(+), 8 deletions(-)

(limited to 'src/lib')

diff --git a/src/lib/libcrypto/buffer/buffer.c b/src/lib/libcrypto/buffer/buffer.c
index 4bd55c04ae..a50c30a348 100644
--- a/src/lib/libcrypto/buffer/buffer.c
+++ b/src/lib/libcrypto/buffer/buffer.c
@@ -153,10 +153,13 @@ BUF_MEM_grow_clean(BUF_MEM *str, size_t len)
 		return 0;
 	}
 	n = (len + 3) / 3 * 4;
-	if (str->data == NULL)
-		ret = malloc(n);
-	else
-		ret = OPENSSL_realloc_clean(str->data, str->max, n);
+	ret = malloc(n);
+	/* we're not shrinking - that case returns above */
+	if ((ret != NULL)  && (str->data != NULL)) {
+		memcpy(ret, str->data, str->max);
+		explicit_bzero(str->data, str->max);
+		free(str->data);
+	}
 	if (ret == NULL) {
 		BUFerr(BUF_F_BUF_MEM_GROW_CLEAN, ERR_R_MALLOC_FAILURE);
 		len = 0;
diff --git a/src/lib/libssl/src/crypto/buffer/buffer.c b/src/lib/libssl/src/crypto/buffer/buffer.c
index 4bd55c04ae..a50c30a348 100644
--- a/src/lib/libssl/src/crypto/buffer/buffer.c
+++ b/src/lib/libssl/src/crypto/buffer/buffer.c
@@ -153,10 +153,13 @@ BUF_MEM_grow_clean(BUF_MEM *str, size_t len)
 		return 0;
 	}
 	n = (len + 3) / 3 * 4;
-	if (str->data == NULL)
-		ret = malloc(n);
-	else
-		ret = OPENSSL_realloc_clean(str->data, str->max, n);
+	ret = malloc(n);
+	/* we're not shrinking - that case returns above */
+	if ((ret != NULL)  && (str->data != NULL)) {
+		memcpy(ret, str->data, str->max);
+		explicit_bzero(str->data, str->max);
+		free(str->data);
+	}
 	if (ret == NULL) {
 		BUFerr(BUF_F_BUF_MEM_GROW_CLEAN, ERR_R_MALLOC_FAILURE);
 		len = 0;
-- 
cgit v1.2.3-55-g6feb