remove OPENSSL_realloc_clean usage here - replace with intrinsics to make
authorbeck <beck@openbsd.org>
Thu, 17 Apr 2014 16:30:59 +0000 (16:30 +0000)
committerbeck <beck@openbsd.org>
Thu, 17 Apr 2014 16:30:59 +0000 (16:30 +0000)
it obvious what should happen.
ok tedu@

lib/libcrypto/buffer/buffer.c
lib/libssl/src/crypto/buffer/buffer.c

index 4bd55c0..a50c30a 100644 (file)
@@ -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;
index 4bd55c0..a50c30a 100644 (file)
@@ -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;