From: Dr. Stephen Henson Date: Fri, 1 Apr 2011 16:23:16 +0000 (+0000) Subject: Allow FIPS malloc callback setting. Automatically set some callbacks X-Git-Tag: OpenSSL-fips-2_0-rc1~617 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=8cf88778ea1fe21bcbb16be778c79e418a3fbdd0;p=oweals%2Fopenssl.git Allow FIPS malloc callback setting. Automatically set some callbacks in OPENSSL_init(). --- diff --git a/crypto/o_init.c b/crypto/o_init.c index 1a042ffc99..1017f3bb4b 100644 --- a/crypto/o_init.c +++ b/crypto/o_init.c @@ -54,6 +54,9 @@ #include #include +#ifdef OPENSSL_FIPS +#include +#endif #if defined(__GNUC__) && __GNUC__>=2 void OPENSSL_init(void) __attribute__((constructor)); @@ -116,6 +119,11 @@ void OPENSSL_init(void) if (done) return; done = 1; +#ifdef OPENSSL_FIPS + FIPS_set_locking_callbacks(CRYPTO_lock, CRYPTO_add_lock); + FIPS_set_error_callbacks(ERR_put_error, ERR_add_error_vdata); + FIPS_set_malloc_callbacks(CRYPTO_malloc, CRYPTO_free); +#endif #if 1 fprintf(stderr, "Called OPENSSL_init\n"); #endif diff --git a/fips/fips.h b/fips/fips.h index 2c71041a70..921591ba98 100644 --- a/fips/fips.h +++ b/fips/fips.h @@ -122,6 +122,10 @@ void FIPS_set_locking_callbacks(void (*func)(int mode, int type, int (*add_cb)(int *pointer, int amount, int type, const char *file, int line)); +void FIPS_set_malloc_callbacks( + void *(*malloc_cb)(int num, const char *file, int line), + void (*free_cb)(void *)); + #define FIPS_ERROR_IGNORED(alg) OpenSSLDie(__FILE__, __LINE__, \ alg " previous FIPS forbidden algorithm error ignored"); diff --git a/fips/utl/fips_mem.c b/fips/utl/fips_mem.c index e0bd0a8265..ff6e727442 100644 --- a/fips/utl/fips_mem.c +++ b/fips/utl/fips_mem.c @@ -84,3 +84,11 @@ void FIPS_free(void *x) { fips_free_cb(x); } + +void FIPS_set_malloc_callbacks( + void *(*malloc_cb)(int num, const char *file, int line), + void (*free_cb)(void *)) + { + fips_malloc_cb = malloc_cb; + fips_free_cb = free_cb; + }