- change memset before free to explicit_bzero
- change ordinary memset's to bzero
- change if(!data) malloc else realloc to realloc
- explicit_bzero on downsize instead of memset
Possible an advantage (the only?) of the previous allocator was this
memset would have never been optimised out.
Sorry for the git patch
diff --git a/lib/libssl/src/crypto/buffer/buffer.c
b/lib/libssl/src/crypto/buffer/buffer.c index 486d6fe..fde718f 100644
--- a/lib/libssl/src/crypto/buffer/buffer.c
+++ b/lib/libssl/src/crypto/buffer/buffer.c
@@ -88,7 +88,7 @@ BUF_MEM_free(BUF_MEM *a)
return;
if (a->data != NULL) {
- memset(a->data, 0, (unsigned int)a->max);
+ explicit_bzero(a->data, a->max);
free(a->data);
}
free(a);
@@ -105,7 +105,7 @@ BUF_MEM_grow(BUF_MEM *str, size_t len)
return (len);
}
if (str->max >= len) {
- memset(&str->data[str->length], 0, len - str->length);
+ bzero(&str->data[str->length], len - str->length);
str->length = len;
return (len);
}
@@ -115,17 +115,15 @@ BUF_MEM_grow(BUF_MEM *str, size_t len)
return 0;
}
n = (len + 3) / 3 * 4;
- if (str->data == NULL)
- ret = malloc(n);
- else
- ret = realloc(str->data, n);
+ ret = realloc(str->data, n);
+
if (ret == NULL) {
BUFerr(BUF_F_BUF_MEM_GROW, ERR_R_MALLOC_FAILURE);
len = 0;
} else {
str->data = ret;
str->max = n;
- memset(&str->data[str->length], 0, len - str->length);
+ bzero(&str->data[str->length], len - str->length);
str->length = len;
}
return (len);
@@ -138,12 +136,12 @@ BUF_MEM_grow_clean(BUF_MEM *str, size_t len)
size_t n;
if (str->length >= len) {
- memset(&str->data[len], 0, str->length - len);
+ explicit_bzero(&str->data[len], str->length - len);
str->length = len;
return (len);
}
if (str->max >= len) {
- memset(&str->data[str->length], 0, len - str->length);
+ bzero(&str->data[str->length], len - str->length);
str->length = len;
return (len);
}
@@ -166,7 +164,7 @@ BUF_MEM_grow_clean(BUF_MEM *str, size_t len)
} else {
str->data = ret;
str->max = n;
- memset(&str->data[str->length], 0, len - str->length);
+ bzero(&str->data[str->length], len - str->length);
str->length = len;
}
return (len);