1656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* crypto/mem.c */ 2656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 3656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * All rights reserved. 4656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 5656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This package is an SSL implementation written 6656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * by Eric Young (eay@cryptsoft.com). 7656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * The implementation was written so as to conform with Netscapes SSL. 8656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 9656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This library is free for commercial and non-commercial use as long as 10656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * the following conditions are aheared to. The following conditions 11656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * apply to all code found in this distribution, be it the RC4, RSA, 12656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * lhash, DES, etc., code; not just the SSL code. The SSL documentation 13656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * included with this distribution is covered by the same copyright terms 14656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * except that the holder is Tim Hudson (tjh@cryptsoft.com). 15656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 16656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Copyright remains Eric Young's, and as such any Copyright notices in 17656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * the code are not to be removed. 18656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * If this package is used in a product, Eric Young should be given attribution 19656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * as the author of the parts of the library used. 20656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This can be in the form of a textual message at program startup or 21656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * in documentation (online or textual) provided with the package. 22656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 23656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Redistribution and use in source and binary forms, with or without 24656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * modification, are permitted provided that the following conditions 25656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * are met: 26656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 1. Redistributions of source code must retain the copyright 27656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * notice, this list of conditions and the following disclaimer. 28656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 29656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * notice, this list of conditions and the following disclaimer in the 30656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * documentation and/or other materials provided with the distribution. 31656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 3. All advertising materials mentioning features or use of this software 32656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * must display the following acknowledgement: 33656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * "This product includes cryptographic software written by 34656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Eric Young (eay@cryptsoft.com)" 35656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * The word 'cryptographic' can be left out if the rouines from the library 36656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * being used are not cryptographic related :-). 37656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 4. If you include any Windows specific code (or a derivative thereof) from 38656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * the apps directory (application code) you must include an acknowledgement: 39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 41656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 42656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 49656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * SUCH DAMAGE. 52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * The licence and distribution terms for any publically available version or 54656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * derivative of this code cannot be changed. i.e. this code cannot simply be 55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * copied and put under another distribution licence 56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * [including the GNU Public Licence.] 57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 59656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <stdio.h> 60656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <stdlib.h> 61656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/crypto.h> 62656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "cryptlib.h" 63656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 64656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 65656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic int allow_customize = 1; /* we provide flexible functions for */ 66656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic int allow_customize_debug = 1;/* exchanging memory-related functions at 67656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * run-time, but this must be done 68656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * before any blocks are actually 69656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * allocated; or we'll run into huge 70656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * problems when malloc/free pairs 71656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * don't match etc. */ 72656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 73656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 74656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 75656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* the following pointers may be changed as long as 'allow_customize' is set */ 76656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 77656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void *(*malloc_func)(size_t) = malloc; 78656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void *default_malloc_ex(size_t num, const char *file, int line) 79656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { return malloc_func(num); } 80656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void *(*malloc_ex_func)(size_t, const char *file, int line) 81656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project = default_malloc_ex; 82656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 83656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void *(*realloc_func)(void *, size_t)= realloc; 84656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void *default_realloc_ex(void *str, size_t num, 85656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const char *file, int line) 86656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { return realloc_func(str,num); } 87656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void *(*realloc_ex_func)(void *, size_t, const char *file, int line) 88656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project = default_realloc_ex; 89656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 90656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void (*free_func)(void *) = free; 91656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 92656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void *(*malloc_locked_func)(size_t) = malloc; 93656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void *default_malloc_locked_ex(size_t num, const char *file, int line) 94656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { return malloc_locked_func(num); } 95656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void *(*malloc_locked_ex_func)(size_t, const char *file, int line) 96656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project = default_malloc_locked_ex; 97656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 98656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void (*free_locked_func)(void *) = free; 99656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 100656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 101656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 102656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* may be changed as long as 'allow_customize_debug' is set */ 103656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* XXX use correct function pointer types */ 104221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#ifdef CRYPTO_MDEBUG 105656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* use default functions from mem_dbg.c */ 106656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void (*malloc_debug_func)(void *,int,const char *,int,int) 107656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project = CRYPTO_dbg_malloc; 108656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void (*realloc_debug_func)(void *,void *,int,const char *,int,int) 109656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project = CRYPTO_dbg_realloc; 110656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void (*free_debug_func)(void *,int) = CRYPTO_dbg_free; 111656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void (*set_debug_options_func)(long) = CRYPTO_dbg_set_options; 112656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic long (*get_debug_options_func)(void) = CRYPTO_dbg_get_options; 113656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#else 114656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* applications can use CRYPTO_malloc_debug_init() to select above case 115656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * at run-time */ 116656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void (*malloc_debug_func)(void *,int,const char *,int,int) = NULL; 117656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void (*realloc_debug_func)(void *,void *,int,const char *,int,int) 118656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project = NULL; 119656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void (*free_debug_func)(void *,int) = NULL; 120656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void (*set_debug_options_func)(long) = NULL; 121656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic long (*get_debug_options_func)(void) = NULL; 122656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 123656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 124656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint CRYPTO_set_mem_functions(void *(*m)(size_t), void *(*r)(void *, size_t), 125656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void (*f)(void *)) 126656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 12704ef91b390dfcc6125913e2f2af502d23d7a5112Brian Carlstrom /* Dummy call just to ensure OPENSSL_init() gets linked in */ 128392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom OPENSSL_init(); 129656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (!allow_customize) 130656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 0; 131656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if ((m == 0) || (r == 0) || (f == 0)) 132656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 0; 133656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project malloc_func=m; malloc_ex_func=default_malloc_ex; 134656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project realloc_func=r; realloc_ex_func=default_realloc_ex; 135656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project free_func=f; 136656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project malloc_locked_func=m; malloc_locked_ex_func=default_malloc_locked_ex; 137656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project free_locked_func=f; 138656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 1; 139656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 140656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 141656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint CRYPTO_set_mem_ex_functions( 142656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void *(*m)(size_t,const char *,int), 143656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void *(*r)(void *, size_t,const char *,int), 144656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void (*f)(void *)) 145656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 146656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (!allow_customize) 147656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 0; 148656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if ((m == 0) || (r == 0) || (f == 0)) 149656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 0; 150656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project malloc_func=0; malloc_ex_func=m; 151656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project realloc_func=0; realloc_ex_func=r; 152656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project free_func=f; 153656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project malloc_locked_func=0; malloc_locked_ex_func=m; 154656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project free_locked_func=f; 155656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 1; 156656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 157656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 158656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint CRYPTO_set_locked_mem_functions(void *(*m)(size_t), void (*f)(void *)) 159656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 160656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (!allow_customize) 161656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 0; 162656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if ((m == NULL) || (f == NULL)) 163656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 0; 164656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project malloc_locked_func=m; malloc_locked_ex_func=default_malloc_locked_ex; 165656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project free_locked_func=f; 166656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 1; 167656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 168656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 169656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint CRYPTO_set_locked_mem_ex_functions( 170656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void *(*m)(size_t,const char *,int), 171656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void (*f)(void *)) 172656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 173656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (!allow_customize) 174656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 0; 175656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if ((m == NULL) || (f == NULL)) 176656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 0; 177656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project malloc_locked_func=0; malloc_locked_ex_func=m; 178656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project free_func=f; 179656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 1; 180656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 181656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 182656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint CRYPTO_set_mem_debug_functions(void (*m)(void *,int,const char *,int,int), 183656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void (*r)(void *,void *,int,const char *,int,int), 184656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void (*f)(void *,int), 185656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void (*so)(long), 186656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project long (*go)(void)) 187656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 188656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (!allow_customize_debug) 189656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 0; 190392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom OPENSSL_init(); 191656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project malloc_debug_func=m; 192656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project realloc_debug_func=r; 193656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project free_debug_func=f; 194656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project set_debug_options_func=so; 195656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project get_debug_options_func=go; 196656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 1; 197656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 198656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 199656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 200656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid CRYPTO_get_mem_functions(void *(**m)(size_t), void *(**r)(void *, size_t), 201656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void (**f)(void *)) 202656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 203656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (m != NULL) *m = (malloc_ex_func == default_malloc_ex) ? 204656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project malloc_func : 0; 205656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (r != NULL) *r = (realloc_ex_func == default_realloc_ex) ? 206656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project realloc_func : 0; 207656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (f != NULL) *f=free_func; 208656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 209656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 210656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid CRYPTO_get_mem_ex_functions( 211656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void *(**m)(size_t,const char *,int), 212656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void *(**r)(void *, size_t,const char *,int), 213656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void (**f)(void *)) 214656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 215656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (m != NULL) *m = (malloc_ex_func != default_malloc_ex) ? 216656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project malloc_ex_func : 0; 217656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (r != NULL) *r = (realloc_ex_func != default_realloc_ex) ? 218656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project realloc_ex_func : 0; 219656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (f != NULL) *f=free_func; 220656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 221656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 222656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid CRYPTO_get_locked_mem_functions(void *(**m)(size_t), void (**f)(void *)) 223656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 224656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (m != NULL) *m = (malloc_locked_ex_func == default_malloc_locked_ex) ? 225656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project malloc_locked_func : 0; 226656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (f != NULL) *f=free_locked_func; 227656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 228656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 229656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid CRYPTO_get_locked_mem_ex_functions( 230656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void *(**m)(size_t,const char *,int), 231656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void (**f)(void *)) 232656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 233656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (m != NULL) *m = (malloc_locked_ex_func != default_malloc_locked_ex) ? 234656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project malloc_locked_ex_func : 0; 235656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (f != NULL) *f=free_locked_func; 236656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 237656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 238656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid CRYPTO_get_mem_debug_functions(void (**m)(void *,int,const char *,int,int), 239656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void (**r)(void *,void *,int,const char *,int,int), 240656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void (**f)(void *,int), 241656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void (**so)(long), 242656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project long (**go)(void)) 243656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 244656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (m != NULL) *m=malloc_debug_func; 245656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (r != NULL) *r=realloc_debug_func; 246656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (f != NULL) *f=free_debug_func; 247656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (so != NULL) *so=set_debug_options_func; 248656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (go != NULL) *go=get_debug_options_func; 249656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 250656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 251656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 252656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid *CRYPTO_malloc_locked(int num, const char *file, int line) 253656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 254656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void *ret = NULL; 255656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 256656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (num <= 0) return NULL; 257656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 258656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project allow_customize = 0; 259656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (malloc_debug_func != NULL) 260656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 261656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project allow_customize_debug = 0; 262656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project malloc_debug_func(NULL, num, file, line, 0); 263656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 264656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ret = malloc_locked_ex_func(num,file,line); 265656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef LEVITTE_DEBUG_MEM 266656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fprintf(stderr, "LEVITTE_DEBUG_MEM: > 0x%p (%d)\n", ret, num); 267656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 268656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (malloc_debug_func != NULL) 269656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project malloc_debug_func(ret, num, file, line, 1); 270656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 271221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#ifndef OPENSSL_CPUID_OBJ 272656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* Create a dependency on the value of 'cleanse_ctr' so our memory 273656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * sanitisation function can't be optimised out. NB: We only do 274656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * this for >2Kb so the overhead doesn't bother us. */ 275656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if(ret && (num > 2048)) 276221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom { extern unsigned char cleanse_ctr; 277656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ((unsigned char *)ret)[0] = cleanse_ctr; 278221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom } 279221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#endif 280656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 281656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return ret; 282656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 283656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 284656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid CRYPTO_free_locked(void *str) 285656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 286656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (free_debug_func != NULL) 287656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project free_debug_func(str, 0); 288656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef LEVITTE_DEBUG_MEM 289656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fprintf(stderr, "LEVITTE_DEBUG_MEM: < 0x%p\n", str); 290656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 291656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project free_locked_func(str); 292656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (free_debug_func != NULL) 293656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project free_debug_func(NULL, 1); 294656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 295656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 296656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid *CRYPTO_malloc(int num, const char *file, int line) 297656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 298656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void *ret = NULL; 299656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 300656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (num <= 0) return NULL; 301656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 302656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project allow_customize = 0; 303656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (malloc_debug_func != NULL) 304656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 305656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project allow_customize_debug = 0; 306656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project malloc_debug_func(NULL, num, file, line, 0); 307656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 308656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ret = malloc_ex_func(num,file,line); 309656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef LEVITTE_DEBUG_MEM 310656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fprintf(stderr, "LEVITTE_DEBUG_MEM: > 0x%p (%d)\n", ret, num); 311656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 312656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (malloc_debug_func != NULL) 313656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project malloc_debug_func(ret, num, file, line, 1); 314656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 315221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#ifndef OPENSSL_CPUID_OBJ 316656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* Create a dependency on the value of 'cleanse_ctr' so our memory 317656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * sanitisation function can't be optimised out. NB: We only do 318656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * this for >2Kb so the overhead doesn't bother us. */ 319656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if(ret && (num > 2048)) 320221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom { extern unsigned char cleanse_ctr; 321656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ((unsigned char *)ret)[0] = cleanse_ctr; 322221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom } 323221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#endif 324221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 325221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom return ret; 326221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom } 327221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromchar *CRYPTO_strdup(const char *str, const char *file, int line) 328221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom { 329221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom char *ret = CRYPTO_malloc(strlen(str)+1, file, line); 330656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 331221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom strcpy(ret, str); 332656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return ret; 333656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 334656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 335656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid *CRYPTO_realloc(void *str, int num, const char *file, int line) 336656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 337656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void *ret = NULL; 338656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 339656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (str == NULL) 340656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return CRYPTO_malloc(num, file, line); 341656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 342656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (num <= 0) return NULL; 343656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 344656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (realloc_debug_func != NULL) 345656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project realloc_debug_func(str, NULL, num, file, line, 0); 346656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ret = realloc_ex_func(str,num,file,line); 347656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef LEVITTE_DEBUG_MEM 348656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fprintf(stderr, "LEVITTE_DEBUG_MEM: | 0x%p -> 0x%p (%d)\n", str, ret, num); 349656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 350656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (realloc_debug_func != NULL) 351656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project realloc_debug_func(str, ret, num, file, line, 1); 352656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 353656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return ret; 354656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 355656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 356656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid *CRYPTO_realloc_clean(void *str, int old_len, int num, const char *file, 357656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int line) 358656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 359656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project void *ret = NULL; 360656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 361656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (str == NULL) 362656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return CRYPTO_malloc(num, file, line); 363656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 364656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (num <= 0) return NULL; 365656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 366243c891739b450bb831aabcd5cd601da4828cd25Brian Carlstrom /* We don't support shrinking the buffer. Note the memcpy that copies 367243c891739b450bb831aabcd5cd601da4828cd25Brian Carlstrom * |old_len| bytes to the new buffer, below. */ 368243c891739b450bb831aabcd5cd601da4828cd25Brian Carlstrom if (num < old_len) return NULL; 369243c891739b450bb831aabcd5cd601da4828cd25Brian Carlstrom 370656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (realloc_debug_func != NULL) 371656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project realloc_debug_func(str, NULL, num, file, line, 0); 372656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ret=malloc_ex_func(num,file,line); 373656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if(ret) 374656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 375656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project memcpy(ret,str,old_len); 376656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project OPENSSL_cleanse(str,old_len); 377656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project free_func(str); 378656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 379656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef LEVITTE_DEBUG_MEM 380656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fprintf(stderr, 381656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project "LEVITTE_DEBUG_MEM: | 0x%p -> 0x%p (%d)\n", 382656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str, ret, num); 383656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 384656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (realloc_debug_func != NULL) 385656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project realloc_debug_func(str, ret, num, file, line, 1); 386656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 387656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return ret; 388656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 389656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 390656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid CRYPTO_free(void *str) 391656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 392656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (free_debug_func != NULL) 393656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project free_debug_func(str, 0); 394656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef LEVITTE_DEBUG_MEM 395656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project fprintf(stderr, "LEVITTE_DEBUG_MEM: < 0x%p\n", str); 396656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 397656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project free_func(str); 398656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (free_debug_func != NULL) 399656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project free_debug_func(NULL, 1); 400656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 401656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 402656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid *CRYPTO_remalloc(void *a, int num, const char *file, int line) 403656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 404656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (a != NULL) OPENSSL_free(a); 405656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project a=(char *)OPENSSL_malloc(num); 406656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return(a); 407656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 408656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 409656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid CRYPTO_set_mem_debug_options(long bits) 410656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 411656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (set_debug_options_func != NULL) 412656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project set_debug_options_func(bits); 413656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 414656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 415656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectlong CRYPTO_get_mem_debug_options(void) 416656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 417656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (get_debug_options_func != NULL) 418656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return get_debug_options_func(); 419656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 0; 420656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 421