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 | } | ||
