diff options
| author | djm <> | 2010-10-01 22:54:18 +0000 |
|---|---|---|
| committer | djm <> | 2010-10-01 22:54:18 +0000 |
| commit | 75291ae343a87368ad49c13ac02f85a88159417f (patch) | |
| tree | a55c90bd6ea9329d2afb5540220340cadd107178 /src/lib/libcrypto/mem.c | |
| parent | 40d5d67842948fbf904eb73da8f09a2ebcd2e243 (diff) | |
| download | openbsd-75291ae343a87368ad49c13ac02f85a88159417f.tar.gz openbsd-75291ae343a87368ad49c13ac02f85a88159417f.tar.bz2 openbsd-75291ae343a87368ad49c13ac02f85a88159417f.zip | |
import OpenSSL-1.0.0a
Diffstat (limited to '')
| -rw-r--r-- | src/lib/libcrypto/mem.c | 64 |
1 files changed, 16 insertions, 48 deletions
diff --git a/src/lib/libcrypto/mem.c b/src/lib/libcrypto/mem.c index 00ebaf0b9b..6f80dd33eb 100644 --- a/src/lib/libcrypto/mem.c +++ b/src/lib/libcrypto/mem.c | |||
| @@ -101,7 +101,7 @@ static void (*free_locked_func)(void *) = free; | |||
| 101 | 101 | ||
| 102 | /* may be changed as long as 'allow_customize_debug' is set */ | 102 | /* may be changed as long as 'allow_customize_debug' is set */ |
| 103 | /* XXX use correct function pointer types */ | 103 | /* XXX use correct function pointer types */ |
| 104 | #if defined(CRYPTO_MDEBUG) && !defined(OPENSSL_FIPS) | 104 | #ifdef CRYPTO_MDEBUG |
| 105 | /* use default functions from mem_dbg.c */ | 105 | /* use default functions from mem_dbg.c */ |
| 106 | static void (*malloc_debug_func)(void *,int,const char *,int,int) | 106 | static void (*malloc_debug_func)(void *,int,const char *,int,int) |
| 107 | = CRYPTO_dbg_malloc; | 107 | = CRYPTO_dbg_malloc; |
| @@ -110,14 +110,6 @@ static void (*realloc_debug_func)(void *,void *,int,const char *,int,int) | |||
| 110 | static void (*free_debug_func)(void *,int) = CRYPTO_dbg_free; | 110 | static void (*free_debug_func)(void *,int) = CRYPTO_dbg_free; |
| 111 | static void (*set_debug_options_func)(long) = CRYPTO_dbg_set_options; | 111 | static void (*set_debug_options_func)(long) = CRYPTO_dbg_set_options; |
| 112 | static long (*get_debug_options_func)(void) = CRYPTO_dbg_get_options; | 112 | static long (*get_debug_options_func)(void) = CRYPTO_dbg_get_options; |
| 113 | |||
| 114 | static int (*push_info_func)(const char *info, const char *file, int line) | ||
| 115 | = CRYPTO_dbg_push_info; | ||
| 116 | static int (*pop_info_func)(void) | ||
| 117 | = CRYPTO_dbg_pop_info; | ||
| 118 | static int (*remove_all_info_func)(void) | ||
| 119 | = CRYPTO_dbg_remove_all_info; | ||
| 120 | |||
| 121 | #else | 113 | #else |
| 122 | /* applications can use CRYPTO_malloc_debug_init() to select above case | 114 | /* applications can use CRYPTO_malloc_debug_init() to select above case |
| 123 | * at run-time */ | 115 | * at run-time */ |
| @@ -127,13 +119,6 @@ static void (*realloc_debug_func)(void *,void *,int,const char *,int,int) | |||
| 127 | static void (*free_debug_func)(void *,int) = NULL; | 119 | static void (*free_debug_func)(void *,int) = NULL; |
| 128 | static void (*set_debug_options_func)(long) = NULL; | 120 | static void (*set_debug_options_func)(long) = NULL; |
| 129 | static long (*get_debug_options_func)(void) = NULL; | 121 | static long (*get_debug_options_func)(void) = NULL; |
| 130 | |||
| 131 | |||
| 132 | static int (*push_info_func)(const char *info, const char *file, int line) | ||
| 133 | = NULL; | ||
| 134 | static int (*pop_info_func)(void) = NULL; | ||
| 135 | static int (*remove_all_info_func)(void) = NULL; | ||
| 136 | |||
| 137 | #endif | 122 | #endif |
| 138 | 123 | ||
| 139 | 124 | ||
| @@ -209,15 +194,6 @@ int CRYPTO_set_mem_debug_functions(void (*m)(void *,int,const char *,int,int), | |||
| 209 | return 1; | 194 | return 1; |
| 210 | } | 195 | } |
| 211 | 196 | ||
| 212 | void CRYPTO_set_mem_info_functions( | ||
| 213 | int (*push_info_fn)(const char *info, const char *file, int line), | ||
| 214 | int (*pop_info_fn)(void), | ||
| 215 | int (*remove_all_info_fn)(void)) | ||
| 216 | { | ||
| 217 | push_info_func = push_info_fn; | ||
| 218 | pop_info_func = pop_info_fn; | ||
| 219 | remove_all_info_func = remove_all_info_fn; | ||
| 220 | } | ||
| 221 | 197 | ||
| 222 | void CRYPTO_get_mem_functions(void *(**m)(size_t), void *(**r)(void *, size_t), | 198 | void CRYPTO_get_mem_functions(void *(**m)(size_t), void *(**r)(void *, size_t), |
| 223 | void (**f)(void *)) | 199 | void (**f)(void *)) |
| @@ -274,7 +250,6 @@ void CRYPTO_get_mem_debug_functions(void (**m)(void *,int,const char *,int,int), | |||
| 274 | void *CRYPTO_malloc_locked(int num, const char *file, int line) | 250 | void *CRYPTO_malloc_locked(int num, const char *file, int line) |
| 275 | { | 251 | { |
| 276 | void *ret = NULL; | 252 | void *ret = NULL; |
| 277 | extern unsigned char cleanse_ctr; | ||
| 278 | 253 | ||
| 279 | if (num <= 0) return NULL; | 254 | if (num <= 0) return NULL; |
| 280 | 255 | ||
| @@ -291,11 +266,15 @@ void *CRYPTO_malloc_locked(int num, const char *file, int line) | |||
| 291 | if (malloc_debug_func != NULL) | 266 | if (malloc_debug_func != NULL) |
| 292 | malloc_debug_func(ret, num, file, line, 1); | 267 | malloc_debug_func(ret, num, file, line, 1); |
| 293 | 268 | ||
| 269 | #ifndef OPENSSL_CPUID_OBJ | ||
| 294 | /* Create a dependency on the value of 'cleanse_ctr' so our memory | 270 | /* Create a dependency on the value of 'cleanse_ctr' so our memory |
| 295 | * sanitisation function can't be optimised out. NB: We only do | 271 | * sanitisation function can't be optimised out. NB: We only do |
| 296 | * this for >2Kb so the overhead doesn't bother us. */ | 272 | * this for >2Kb so the overhead doesn't bother us. */ |
| 297 | if(ret && (num > 2048)) | 273 | if(ret && (num > 2048)) |
| 274 | { extern unsigned char cleanse_ctr; | ||
| 298 | ((unsigned char *)ret)[0] = cleanse_ctr; | 275 | ((unsigned char *)ret)[0] = cleanse_ctr; |
| 276 | } | ||
| 277 | #endif | ||
| 299 | 278 | ||
| 300 | return ret; | 279 | return ret; |
| 301 | } | 280 | } |
| @@ -315,7 +294,6 @@ void CRYPTO_free_locked(void *str) | |||
| 315 | void *CRYPTO_malloc(int num, const char *file, int line) | 294 | void *CRYPTO_malloc(int num, const char *file, int line) |
| 316 | { | 295 | { |
| 317 | void *ret = NULL; | 296 | void *ret = NULL; |
| 318 | extern unsigned char cleanse_ctr; | ||
| 319 | 297 | ||
| 320 | if (num <= 0) return NULL; | 298 | if (num <= 0) return NULL; |
| 321 | 299 | ||
| @@ -332,12 +310,23 @@ void *CRYPTO_malloc(int num, const char *file, int line) | |||
| 332 | if (malloc_debug_func != NULL) | 310 | if (malloc_debug_func != NULL) |
| 333 | malloc_debug_func(ret, num, file, line, 1); | 311 | malloc_debug_func(ret, num, file, line, 1); |
| 334 | 312 | ||
| 313 | #ifndef OPENSSL_CPUID_OBJ | ||
| 335 | /* Create a dependency on the value of 'cleanse_ctr' so our memory | 314 | /* Create a dependency on the value of 'cleanse_ctr' so our memory |
| 336 | * sanitisation function can't be optimised out. NB: We only do | 315 | * sanitisation function can't be optimised out. NB: We only do |
| 337 | * this for >2Kb so the overhead doesn't bother us. */ | 316 | * this for >2Kb so the overhead doesn't bother us. */ |
| 338 | if(ret && (num > 2048)) | 317 | if(ret && (num > 2048)) |
| 318 | { extern unsigned char cleanse_ctr; | ||
| 339 | ((unsigned char *)ret)[0] = cleanse_ctr; | 319 | ((unsigned char *)ret)[0] = cleanse_ctr; |
| 320 | } | ||
| 321 | #endif | ||
| 322 | |||
| 323 | return ret; | ||
| 324 | } | ||
| 325 | char *CRYPTO_strdup(const char *str, const char *file, int line) | ||
| 326 | { | ||
| 327 | char *ret = CRYPTO_malloc(strlen(str)+1, file, line); | ||
| 340 | 328 | ||
| 329 | strcpy(ret, str); | ||
| 341 | return ret; | 330 | return ret; |
| 342 | } | 331 | } |
| 343 | 332 | ||
| @@ -423,24 +412,3 @@ long CRYPTO_get_mem_debug_options(void) | |||
| 423 | return get_debug_options_func(); | 412 | return get_debug_options_func(); |
| 424 | return 0; | 413 | return 0; |
| 425 | } | 414 | } |
| 426 | |||
| 427 | int CRYPTO_push_info_(const char *info, const char *file, int line) | ||
| 428 | { | ||
| 429 | if (push_info_func) | ||
| 430 | return push_info_func(info, file, line); | ||
| 431 | return 1; | ||
| 432 | } | ||
| 433 | |||
| 434 | int CRYPTO_pop_info(void) | ||
| 435 | { | ||
| 436 | if (pop_info_func) | ||
| 437 | return pop_info_func(); | ||
| 438 | return 1; | ||
| 439 | } | ||
| 440 | |||
| 441 | int CRYPTO_remove_all_info(void) | ||
| 442 | { | ||
| 443 | if (remove_all_info_func) | ||
| 444 | return remove_all_info_func(); | ||
| 445 | return 1; | ||
| 446 | } | ||
