diff options
Diffstat (limited to '')
| -rw-r--r-- | src/lib/libcrypto/mem_dbg.c | 66 | 
1 files changed, 29 insertions, 37 deletions
| diff --git a/src/lib/libcrypto/mem_dbg.c b/src/lib/libcrypto/mem_dbg.c index a399485300..866c53e73a 100644 --- a/src/lib/libcrypto/mem_dbg.c +++ b/src/lib/libcrypto/mem_dbg.c | |||
| @@ -108,7 +108,7 @@ static LHASH *amih=NULL; /* hash-table with those app_mem_info_st's | |||
| 108 | typedef struct mem_st | 108 | typedef struct mem_st | 
| 109 | /* memory-block description */ | 109 | /* memory-block description */ | 
| 110 | { | 110 | { | 
| 111 | char *addr; | 111 | void *addr; | 
| 112 | int num; | 112 | int num; | 
| 113 | const char *file; | 113 | const char *file; | 
| 114 | int line; | 114 | int line; | 
| @@ -221,7 +221,7 @@ long CRYPTO_dbg_get_options(void) | |||
| 221 | 221 | ||
| 222 | static int mem_cmp(MEM *a, MEM *b) | 222 | static int mem_cmp(MEM *a, MEM *b) | 
| 223 | { | 223 | { | 
| 224 | return(a->addr - b->addr); | 224 | return((char *)a->addr - (char *)b->addr); | 
| 225 | } | 225 | } | 
| 226 | 226 | ||
| 227 | static unsigned long mem_hash(MEM *a) | 227 | static unsigned long mem_hash(MEM *a) | 
| @@ -279,7 +279,7 @@ static APP_INFO *pop_info() | |||
| 279 | ret->next = NULL; | 279 | ret->next = NULL; | 
| 280 | if (next != NULL) | 280 | if (next != NULL) | 
| 281 | next->references--; | 281 | next->references--; | 
| 282 | Free(ret); | 282 | OPENSSL_free(ret); | 
| 283 | } | 283 | } | 
| 284 | } | 284 | } | 
| 285 | } | 285 | } | 
| @@ -295,7 +295,7 @@ int CRYPTO_push_info_(const char *info, const char *file, int line) | |||
| 295 | { | 295 | { | 
| 296 | MemCheck_off(); /* obtains CRYPTO_LOCK_MALLOC2 */ | 296 | MemCheck_off(); /* obtains CRYPTO_LOCK_MALLOC2 */ | 
| 297 | 297 | ||
| 298 | if ((ami = (APP_INFO *)Malloc(sizeof(APP_INFO))) == NULL) | 298 | if ((ami = (APP_INFO *)OPENSSL_malloc(sizeof(APP_INFO))) == NULL) | 
| 299 | { | 299 | { | 
| 300 | ret=0; | 300 | ret=0; | 
| 301 | goto err; | 301 | goto err; | 
| @@ -304,7 +304,7 @@ int CRYPTO_push_info_(const char *info, const char *file, int line) | |||
| 304 | { | 304 | { | 
| 305 | if ((amih=lh_new(app_info_hash,app_info_cmp)) == NULL) | 305 | if ((amih=lh_new(app_info_hash,app_info_cmp)) == NULL) | 
| 306 | { | 306 | { | 
| 307 | Free(ami); | 307 | OPENSSL_free(ami); | 
| 308 | ret=0; | 308 | ret=0; | 
| 309 | goto err; | 309 | goto err; | 
| 310 | } | 310 | } | 
| @@ -386,9 +386,9 @@ void CRYPTO_dbg_malloc(void *addr, int num, const char *file, int line, | |||
| 386 | if (is_MemCheck_on()) | 386 | if (is_MemCheck_on()) | 
| 387 | { | 387 | { | 
| 388 | MemCheck_off(); /* obtains CRYPTO_LOCK_MALLOC2 */ | 388 | MemCheck_off(); /* obtains CRYPTO_LOCK_MALLOC2 */ | 
| 389 | if ((m=(MEM *)Malloc(sizeof(MEM))) == NULL) | 389 | if ((m=(MEM *)OPENSSL_malloc(sizeof(MEM))) == NULL) | 
| 390 | { | 390 | { | 
| 391 | Free(addr); | 391 | OPENSSL_free(addr); | 
| 392 | MemCheck_on(); /* releases CRYPTO_LOCK_MALLOC2 */ | 392 | MemCheck_on(); /* releases CRYPTO_LOCK_MALLOC2 */ | 
| 393 | return; | 393 | return; | 
| 394 | } | 394 | } | 
| @@ -396,8 +396,8 @@ void CRYPTO_dbg_malloc(void *addr, int num, const char *file, int line, | |||
| 396 | { | 396 | { | 
| 397 | if ((mh=lh_new(mem_hash,mem_cmp)) == NULL) | 397 | if ((mh=lh_new(mem_hash,mem_cmp)) == NULL) | 
| 398 | { | 398 | { | 
| 399 | Free(addr); | 399 | OPENSSL_free(addr); | 
| 400 | Free(m); | 400 | OPENSSL_free(m); | 
| 401 | addr=NULL; | 401 | addr=NULL; | 
| 402 | goto err; | 402 | goto err; | 
| 403 | } | 403 | } | 
| @@ -445,7 +445,7 @@ void CRYPTO_dbg_malloc(void *addr, int num, const char *file, int line, | |||
| 445 | { | 445 | { | 
| 446 | mm->app_info->references--; | 446 | mm->app_info->references--; | 
| 447 | } | 447 | } | 
| 448 | Free(mm); | 448 | OPENSSL_free(mm); | 
| 449 | } | 449 | } | 
| 450 | err: | 450 | err: | 
| 451 | MemCheck_on(); /* releases CRYPTO_LOCK_MALLOC2 */ | 451 | MemCheck_on(); /* releases CRYPTO_LOCK_MALLOC2 */ | 
| @@ -481,7 +481,7 @@ void CRYPTO_dbg_free(void *addr, int before_p) | |||
| 481 | { | 481 | { | 
| 482 | mp->app_info->references--; | 482 | mp->app_info->references--; | 
| 483 | } | 483 | } | 
| 484 | Free(mp); | 484 | OPENSSL_free(mp); | 
| 485 | } | 485 | } | 
| 486 | 486 | ||
| 487 | MemCheck_on(); /* releases CRYPTO_LOCK_MALLOC2 */ | 487 | MemCheck_on(); /* releases CRYPTO_LOCK_MALLOC2 */ | 
| @@ -696,32 +696,6 @@ void CRYPTO_mem_leaks(BIO *b) | |||
| 696 | #endif | 696 | #endif | 
| 697 | } | 697 | } | 
| 698 | 698 | ||
| 699 | union void_fn_to_char_u | ||
| 700 | { | ||
| 701 | char *char_p; | ||
| 702 | void (*fn_p)(); | ||
| 703 | }; | ||
| 704 | |||
| 705 | static void cb_leak(MEM *m, char *cb) | ||
| 706 | { | ||
| 707 | union void_fn_to_char_u mem_callback; | ||
| 708 | |||
| 709 | mem_callback.char_p=cb; | ||
| 710 | mem_callback.fn_p(m->order,m->file,m->line,m->num,m->addr); | ||
| 711 | } | ||
| 712 | |||
| 713 | void CRYPTO_mem_leaks_cb(void (*cb)()) | ||
| 714 | { | ||
| 715 | union void_fn_to_char_u mem_cb; | ||
| 716 | |||
| 717 | if (mh == NULL) return; | ||
| 718 | CRYPTO_w_lock(CRYPTO_LOCK_MALLOC2); | ||
| 719 | mem_cb.fn_p=cb; | ||
| 720 | lh_doall_arg(mh,(void (*)())cb_leak,mem_cb.char_p); | ||
| 721 | mem_cb.char_p=NULL; | ||
| 722 | CRYPTO_w_unlock(CRYPTO_LOCK_MALLOC2); | ||
| 723 | } | ||
| 724 | |||
| 725 | #ifndef NO_FP_API | 699 | #ifndef NO_FP_API | 
| 726 | void CRYPTO_mem_leaks_fp(FILE *fp) | 700 | void CRYPTO_mem_leaks_fp(FILE *fp) | 
| 727 | { | 701 | { | 
| @@ -736,3 +710,21 @@ void CRYPTO_mem_leaks_fp(FILE *fp) | |||
| 736 | } | 710 | } | 
| 737 | #endif | 711 | #endif | 
| 738 | 712 | ||
| 713 | |||
| 714 | |||
| 715 | /* FIXME: We really don't allow much to the callback. For example, it has | ||
| 716 | no chance of reaching the info stack for the item it processes. Should | ||
| 717 | it really be this way? -- Richard Levitte */ | ||
| 718 | static void cb_leak(MEM *m, | ||
| 719 | void (**cb)(unsigned long, const char *, int, int, void *)) | ||
| 720 | { | ||
| 721 | (**cb)(m->order,m->file,m->line,m->num,m->addr); | ||
| 722 | } | ||
| 723 | |||
| 724 | void CRYPTO_mem_leaks_cb(void (*cb)(unsigned long, const char *, int, int, void *)) | ||
| 725 | { | ||
| 726 | if (mh == NULL) return; | ||
| 727 | CRYPTO_w_lock(CRYPTO_LOCK_MALLOC2); | ||
| 728 | lh_doall_arg(mh,(void (*)())cb_leak,(void *)&cb); | ||
| 729 | CRYPTO_w_unlock(CRYPTO_LOCK_MALLOC2); | ||
| 730 | } | ||
