mirror of https://github.com/openssl/openssl.git
crypto/mem.c: factor out memory allocation failure reporting
Signed-off-by: Eugene Syromiatnikov <esyr@openssl.org>
This commit is contained in:
parent
b8c46cba5f
commit
50495d9d1a
11
crypto/mem.c
11
crypto/mem.c
|
|
@ -9,6 +9,7 @@
|
|||
|
||||
#include "internal/e_os.h"
|
||||
#include "internal/cryptlib.h"
|
||||
#include "internal/mem_alloc_utils.h"
|
||||
#include "crypto/cryptlib.h"
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
|
@ -212,15 +213,7 @@ void *CRYPTO_malloc(size_t num, const char *file, int line)
|
|||
if (ossl_likely(ptr != NULL))
|
||||
return ptr;
|
||||
err:
|
||||
/*
|
||||
* ossl_err_get_state_int() in err.c uses CRYPTO_zalloc(num, NULL, 0) for
|
||||
* ERR_STATE allocation. Prevent mem alloc error loop while reporting error.
|
||||
*/
|
||||
if (file != NULL || line != 0) {
|
||||
ERR_new();
|
||||
ERR_set_debug(file, line, NULL);
|
||||
ERR_set_error(ERR_LIB_CRYPTO, ERR_R_MALLOC_FAILURE, NULL);
|
||||
}
|
||||
ossl_report_alloc_err(file, line);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,50 @@
|
|||
/*
|
||||
* Copyright 2025 The OpenSSL Project Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the Apache License 2.0 (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
* in the file LICENSE in the source distribution or at
|
||||
* https://www.openssl.org/source/license.html
|
||||
*/
|
||||
|
||||
/*
|
||||
* Utility overflow checking and reporting functions
|
||||
*/
|
||||
|
||||
#ifndef OSSL_INTERNAL_CHECK_SIZE_OVERFLOW_H
|
||||
# define OSSL_INTERNAL_CHECK_SIZE_OVERFLOW_H
|
||||
|
||||
# include "internal/common.h"
|
||||
|
||||
# include <openssl/cryptoerr.h>
|
||||
# include <openssl/err.h>
|
||||
|
||||
/*
|
||||
* A helper routine to report memory allocation errors.
|
||||
* Similar to the ERR_raise() macro, but accepts explicit file/line arguments,
|
||||
* pre-defines the library to ERR_LIB_CRYPTO, and avoids emitting an error
|
||||
* if both file set to NULL and line set to 0.
|
||||
*/
|
||||
static ossl_inline ossl_unused void
|
||||
ossl_report_alloc_err_ex(const char * const file, const int line,
|
||||
const int reason)
|
||||
{
|
||||
/*
|
||||
* ossl_err_get_state_int() in err.c uses CRYPTO_zalloc(num, NULL, 0) for
|
||||
* ERR_STATE allocation. Prevent mem alloc error loop while reporting error.
|
||||
*/
|
||||
if (file != NULL || line != 0) {
|
||||
ERR_new();
|
||||
ERR_set_debug(file, line, NULL);
|
||||
ERR_set_error(ERR_LIB_CRYPTO, reason, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
/* Report a memory allocation failure. */
|
||||
static inline void
|
||||
ossl_report_alloc_err(const char * const file, const int line)
|
||||
{
|
||||
ossl_report_alloc_err_ex(file, line, ERR_R_MALLOC_FAILURE);
|
||||
}
|
||||
|
||||
#endif /* OSSL_INTERNAL_CHECK_SIZE_OVERFLOW_H */
|
||||
Loading…
Reference in New Issue