Skip to content

Commit 9167a47

Browse files
committed
Adapt CRYPTO_secure_malloc() like CRYPTO_malloc()
In other words, make it raise ERR_R_MALLOC_FAILURE appropriately. Reviewed-by: Tomas Mraz <[email protected]> Reviewed-by: Hugo Landau <[email protected]> (Merged from openssl#19301)
1 parent 894f216 commit 9167a47

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

crypto/mem_sec.c

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
*/
1818
#include "internal/e_os.h"
1919
#include <openssl/crypto.h>
20+
#include <openssl/err.h>
2021

2122
#include <string.h>
2223

@@ -140,18 +141,27 @@ int CRYPTO_secure_malloc_initialized(void)
140141
void *CRYPTO_secure_malloc(size_t num, const char *file, int line)
141142
{
142143
#ifndef OPENSSL_NO_SECURE_MEMORY
143-
void *ret;
144+
void *ret = NULL;
144145
size_t actual_size;
146+
int reason = CRYPTO_R_SECURE_MALLOC_FAILURE;
145147

146148
if (!secure_mem_initialized) {
147149
return CRYPTO_malloc(num, file, line);
148150
}
149-
if (!CRYPTO_THREAD_write_lock(sec_malloc_lock))
150-
return NULL;
151+
if (!CRYPTO_THREAD_write_lock(sec_malloc_lock)) {
152+
reason = ERR_R_CRYPTO_LIB;
153+
goto err;
154+
}
151155
ret = sh_malloc(num);
152156
actual_size = ret ? sh_actual_size(ret) : 0;
153157
secure_mem_used += actual_size;
154158
CRYPTO_THREAD_unlock(sec_malloc_lock);
159+
err:
160+
if (ret == NULL && (file != NULL || line != 0)) {
161+
ERR_new();
162+
ERR_set_debug(file, line, NULL);
163+
ERR_set_error(ERR_LIB_CRYPTO, reason, NULL);
164+
}
155165
return ret;
156166
#else
157167
return CRYPTO_malloc(num, file, line);

0 commit comments

Comments
 (0)