1*4724848cSchristos=pod 2*4724848cSchristos 3*4724848cSchristos=head1 NAME 4*4724848cSchristos 5*4724848cSchristosOPENSSL_malloc_init, 6*4724848cSchristosOPENSSL_malloc, OPENSSL_zalloc, OPENSSL_realloc, OPENSSL_free, 7*4724848cSchristosOPENSSL_clear_realloc, OPENSSL_clear_free, OPENSSL_cleanse, 8*4724848cSchristosCRYPTO_malloc, CRYPTO_zalloc, CRYPTO_realloc, CRYPTO_free, 9*4724848cSchristosOPENSSL_strdup, OPENSSL_strndup, 10*4724848cSchristosOPENSSL_memdup, OPENSSL_strlcpy, OPENSSL_strlcat, 11*4724848cSchristosOPENSSL_hexstr2buf, OPENSSL_buf2hexstr, OPENSSL_hexchar2int, 12*4724848cSchristosCRYPTO_strdup, CRYPTO_strndup, 13*4724848cSchristosOPENSSL_mem_debug_push, OPENSSL_mem_debug_pop, 14*4724848cSchristosCRYPTO_mem_debug_push, CRYPTO_mem_debug_pop, 15*4724848cSchristosCRYPTO_clear_realloc, CRYPTO_clear_free, 16*4724848cSchristosCRYPTO_get_mem_functions, CRYPTO_set_mem_functions, 17*4724848cSchristosCRYPTO_get_alloc_counts, 18*4724848cSchristosCRYPTO_set_mem_debug, CRYPTO_mem_ctrl, 19*4724848cSchristosCRYPTO_mem_leaks, CRYPTO_mem_leaks_fp, CRYPTO_mem_leaks_cb, 20*4724848cSchristosOPENSSL_MALLOC_FAILURES, 21*4724848cSchristosOPENSSL_MALLOC_FD 22*4724848cSchristos- Memory allocation functions 23*4724848cSchristos 24*4724848cSchristos=head1 SYNOPSIS 25*4724848cSchristos 26*4724848cSchristos #include <openssl/crypto.h> 27*4724848cSchristos 28*4724848cSchristos int OPENSSL_malloc_init(void) 29*4724848cSchristos 30*4724848cSchristos void *OPENSSL_malloc(size_t num) 31*4724848cSchristos void *OPENSSL_zalloc(size_t num) 32*4724848cSchristos void *OPENSSL_realloc(void *addr, size_t num) 33*4724848cSchristos void OPENSSL_free(void *addr) 34*4724848cSchristos char *OPENSSL_strdup(const char *str) 35*4724848cSchristos char *OPENSSL_strndup(const char *str, size_t s) 36*4724848cSchristos size_t OPENSSL_strlcat(char *dst, const char *src, size_t size); 37*4724848cSchristos size_t OPENSSL_strlcpy(char *dst, const char *src, size_t size); 38*4724848cSchristos void *OPENSSL_memdup(void *data, size_t s) 39*4724848cSchristos void *OPENSSL_clear_realloc(void *p, size_t old_len, size_t num) 40*4724848cSchristos void OPENSSL_clear_free(void *str, size_t num) 41*4724848cSchristos void OPENSSL_cleanse(void *ptr, size_t len); 42*4724848cSchristos 43*4724848cSchristos unsigned char *OPENSSL_hexstr2buf(const char *str, long *len); 44*4724848cSchristos char *OPENSSL_buf2hexstr(const unsigned char *buffer, long len); 45*4724848cSchristos int OPENSSL_hexchar2int(unsigned char c); 46*4724848cSchristos 47*4724848cSchristos void *CRYPTO_malloc(size_t num, const char *file, int line) 48*4724848cSchristos void *CRYPTO_zalloc(size_t num, const char *file, int line) 49*4724848cSchristos void *CRYPTO_realloc(void *p, size_t num, const char *file, int line) 50*4724848cSchristos void CRYPTO_free(void *str, const char *, int) 51*4724848cSchristos char *CRYPTO_strdup(const char *p, const char *file, int line) 52*4724848cSchristos char *CRYPTO_strndup(const char *p, size_t num, const char *file, int line) 53*4724848cSchristos void *CRYPTO_clear_realloc(void *p, size_t old_len, size_t num, 54*4724848cSchristos const char *file, int line) 55*4724848cSchristos void CRYPTO_clear_free(void *str, size_t num, const char *, int) 56*4724848cSchristos 57*4724848cSchristos void CRYPTO_get_mem_functions( 58*4724848cSchristos void *(**m)(size_t, const char *, int), 59*4724848cSchristos void *(**r)(void *, size_t, const char *, int), 60*4724848cSchristos void (**f)(void *, const char *, int)) 61*4724848cSchristos int CRYPTO_set_mem_functions( 62*4724848cSchristos void *(*m)(size_t, const char *, int), 63*4724848cSchristos void *(*r)(void *, size_t, const char *, int), 64*4724848cSchristos void (*f)(void *, const char *, int)) 65*4724848cSchristos 66*4724848cSchristos void CRYPTO_get_alloc_counts(int *m, int *r, int *f) 67*4724848cSchristos 68*4724848cSchristos int CRYPTO_set_mem_debug(int onoff) 69*4724848cSchristos 70*4724848cSchristos env OPENSSL_MALLOC_FAILURES=... <application> 71*4724848cSchristos env OPENSSL_MALLOC_FD=... <application> 72*4724848cSchristos 73*4724848cSchristos int CRYPTO_mem_ctrl(int mode); 74*4724848cSchristos 75*4724848cSchristos int OPENSSL_mem_debug_push(const char *info) 76*4724848cSchristos int OPENSSL_mem_debug_pop(void); 77*4724848cSchristos 78*4724848cSchristos int CRYPTO_mem_debug_push(const char *info, const char *file, int line); 79*4724848cSchristos int CRYPTO_mem_debug_pop(void); 80*4724848cSchristos 81*4724848cSchristos int CRYPTO_mem_leaks(BIO *b); 82*4724848cSchristos int CRYPTO_mem_leaks_fp(FILE *fp); 83*4724848cSchristos int CRYPTO_mem_leaks_cb(int (*cb)(const char *str, size_t len, void *u), 84*4724848cSchristos void *u); 85*4724848cSchristos 86*4724848cSchristos=head1 DESCRIPTION 87*4724848cSchristos 88*4724848cSchristosOpenSSL memory allocation is handled by the B<OPENSSL_xxx> API. These are 89*4724848cSchristosgenerally macro's that add the standard C B<__FILE__> and B<__LINE__> 90*4724848cSchristosparameters and call a lower-level B<CRYPTO_xxx> API. 91*4724848cSchristosSome functions do not add those parameters, but exist for consistency. 92*4724848cSchristos 93*4724848cSchristosOPENSSL_malloc_init() does nothing and does not need to be called. It is 94*4724848cSchristosincluded for compatibility with older versions of OpenSSL. 95*4724848cSchristos 96*4724848cSchristosOPENSSL_malloc(), OPENSSL_realloc(), and OPENSSL_free() are like the 97*4724848cSchristosC malloc(), realloc(), and free() functions. 98*4724848cSchristosOPENSSL_zalloc() calls memset() to zero the memory before returning. 99*4724848cSchristos 100*4724848cSchristosOPENSSL_clear_realloc() and OPENSSL_clear_free() should be used 101*4724848cSchristoswhen the buffer at B<addr> holds sensitive information. 102*4724848cSchristosThe old buffer is filled with zero's by calling OPENSSL_cleanse() 103*4724848cSchristosbefore ultimately calling OPENSSL_free(). 104*4724848cSchristos 105*4724848cSchristosOPENSSL_cleanse() fills B<ptr> of size B<len> with a string of 0's. 106*4724848cSchristosUse OPENSSL_cleanse() with care if the memory is a mapping of a file. 107*4724848cSchristosIf the storage controller uses write compression, then it's possible 108*4724848cSchristosthat sensitive tail bytes will survive zeroization because the block of 109*4724848cSchristoszeros will be compressed. If the storage controller uses wear leveling, 110*4724848cSchristosthen the old sensitive data will not be overwritten; rather, a block of 111*4724848cSchristos0's will be written at a new physical location. 112*4724848cSchristos 113*4724848cSchristosOPENSSL_strdup(), OPENSSL_strndup() and OPENSSL_memdup() are like the 114*4724848cSchristosequivalent C functions, except that memory is allocated by calling the 115*4724848cSchristosOPENSSL_malloc() and should be released by calling OPENSSL_free(). 116*4724848cSchristos 117*4724848cSchristosOPENSSL_strlcpy(), 118*4724848cSchristosOPENSSL_strlcat() and OPENSSL_strnlen() are equivalents of the common C 119*4724848cSchristoslibrary functions and are provided for portability. 120*4724848cSchristos 121*4724848cSchristosOPENSSL_hexstr2buf() parses B<str> as a hex string and returns a 122*4724848cSchristospointer to the parsed value. The memory is allocated by calling 123*4724848cSchristosOPENSSL_malloc() and should be released by calling OPENSSL_free(). 124*4724848cSchristosIf B<len> is not NULL, it is filled in with the output length. 125*4724848cSchristosColons between two-character hex "bytes" are ignored. 126*4724848cSchristosAn odd number of hex digits is an error. 127*4724848cSchristos 128*4724848cSchristosOPENSSL_buf2hexstr() takes the specified buffer and length, and returns 129*4724848cSchristosa hex string for value, or NULL on error. 130*4724848cSchristosB<Buffer> cannot be NULL; if B<len> is 0 an empty string is returned. 131*4724848cSchristos 132*4724848cSchristosOPENSSL_hexchar2int() converts a character to the hexadecimal equivalent, 133*4724848cSchristosor returns -1 on error. 134*4724848cSchristos 135*4724848cSchristosIf no allocations have been done, it is possible to "swap out" the default 136*4724848cSchristosimplementations for OPENSSL_malloc(), OPENSSL_realloc and OPENSSL_free() 137*4724848cSchristosand replace them with alternate versions (hooks). 138*4724848cSchristosCRYPTO_get_mem_functions() function fills in the given arguments with the 139*4724848cSchristosfunction pointers for the current implementations. 140*4724848cSchristosWith CRYPTO_set_mem_functions(), you can specify a different set of functions. 141*4724848cSchristosIf any of B<m>, B<r>, or B<f> are NULL, then the function is not changed. 142*4724848cSchristos 143*4724848cSchristosThe default implementation can include some debugging capability (if enabled 144*4724848cSchristosat build-time). 145*4724848cSchristosThis adds some overhead by keeping a list of all memory allocations, and 146*4724848cSchristosremoves items from the list when they are free'd. 147*4724848cSchristosThis is most useful for identifying memory leaks. 148*4724848cSchristosCRYPTO_set_mem_debug() turns this tracking on and off. In order to have 149*4724848cSchristosany effect, is must be called before any of the allocation functions 150*4724848cSchristos(e.g., CRYPTO_malloc()) are called, and is therefore normally one of the 151*4724848cSchristosfirst lines of main() in an application. 152*4724848cSchristosCRYPTO_mem_ctrl() provides fine-grained control of memory leak tracking. 153*4724848cSchristosTo enable tracking call CRYPTO_mem_ctrl() with a B<mode> argument of 154*4724848cSchristosthe B<CRYPTO_MEM_CHECK_ON>. 155*4724848cSchristosTo disable tracking call CRYPTO_mem_ctrl() with a B<mode> argument of 156*4724848cSchristosthe B<CRYPTO_MEM_CHECK_OFF>. 157*4724848cSchristos 158*4724848cSchristosWhile checking memory, it can be useful to store additional context 159*4724848cSchristosabout what is being done. 160*4724848cSchristosFor example, identifying the field names when parsing a complicated 161*4724848cSchristosdata structure. 162*4724848cSchristosOPENSSL_mem_debug_push() (which calls CRYPTO_mem_debug_push()) 163*4724848cSchristosattaches an identifying string to the allocation stack. 164*4724848cSchristosThis must be a global or other static string; it is not copied. 165*4724848cSchristosOPENSSL_mem_debug_pop() removes identifying state from the stack. 166*4724848cSchristos 167*4724848cSchristosAt the end of the program, calling CRYPTO_mem_leaks() or 168*4724848cSchristosCRYPTO_mem_leaks_fp() will report all "leaked" memory, writing it 169*4724848cSchristosto the specified BIO B<b> or FILE B<fp>. These functions return 1 if 170*4724848cSchristosthere are no leaks, 0 if there are leaks and -1 if an error occurred. 171*4724848cSchristos 172*4724848cSchristosCRYPTO_mem_leaks_cb() does the same as CRYPTO_mem_leaks(), but instead 173*4724848cSchristosof writing to a given BIO, the callback function is called for each 174*4724848cSchristosoutput string with the string, length, and userdata B<u> as the callback 175*4724848cSchristosparameters. 176*4724848cSchristos 177*4724848cSchristosIf the library is built with the C<crypto-mdebug> option, then one 178*4724848cSchristosfunction, CRYPTO_get_alloc_counts(), and two additional environment 179*4724848cSchristosvariables, B<OPENSSL_MALLOC_FAILURES> and B<OPENSSL_MALLOC_FD>, 180*4724848cSchristosare available. 181*4724848cSchristos 182*4724848cSchristosThe function CRYPTO_get_alloc_counts() fills in the number of times 183*4724848cSchristoseach of CRYPTO_malloc(), CRYPTO_realloc(), and CRYPTO_free() have been 184*4724848cSchristoscalled, into the values pointed to by B<mcount>, B<rcount>, and B<fcount>, 185*4724848cSchristosrespectively. If a pointer is NULL, then the corresponding count is not stored. 186*4724848cSchristos 187*4724848cSchristosThe variable 188*4724848cSchristosB<OPENSSL_MALLOC_FAILURES> controls how often allocations should fail. 189*4724848cSchristosIt is a set of fields separated by semicolons, which each field is a count 190*4724848cSchristos(defaulting to zero) and an optional atsign and percentage (defaulting 191*4724848cSchristosto 100). If the count is zero, then it lasts forever. For example, 192*4724848cSchristosC<100;@25> or C<100@0;0@25> means the first 100 allocations pass, then all 193*4724848cSchristosother allocations (until the program exits or crashes) have a 25% chance of 194*4724848cSchristosfailing. 195*4724848cSchristos 196*4724848cSchristosIf the variable B<OPENSSL_MALLOC_FD> is parsed as a positive integer, then 197*4724848cSchristosit is taken as an open file descriptor, and a record of all allocations is 198*4724848cSchristoswritten to that descriptor. If an allocation will fail, and the platform 199*4724848cSchristossupports it, then a backtrace will be written to the descriptor. This can 200*4724848cSchristosbe useful because a malloc may fail but not be checked, and problems will 201*4724848cSchristosonly occur later. The following example in classic shell syntax shows how 202*4724848cSchristosto use this (will not work on all platforms): 203*4724848cSchristos 204*4724848cSchristos OPENSSL_MALLOC_FAILURES='200;@10' 205*4724848cSchristos export OPENSSL_MALLOC_FAILURES 206*4724848cSchristos OPENSSL_MALLOC_FD=3 207*4724848cSchristos export OPENSSL_MALLOC_FD 208*4724848cSchristos ...app invocation... 3>/tmp/log$$ 209*4724848cSchristos 210*4724848cSchristos 211*4724848cSchristos=head1 RETURN VALUES 212*4724848cSchristos 213*4724848cSchristosOPENSSL_malloc_init(), OPENSSL_free(), OPENSSL_clear_free() 214*4724848cSchristosCRYPTO_free(), CRYPTO_clear_free() and CRYPTO_get_mem_functions() 215*4724848cSchristosreturn no value. 216*4724848cSchristos 217*4724848cSchristosCRYPTO_mem_leaks(), CRYPTO_mem_leaks_fp() and CRYPTO_mem_leaks_cb() return 1 if 218*4724848cSchristosthere are no leaks, 0 if there are leaks and -1 if an error occurred. 219*4724848cSchristos 220*4724848cSchristosOPENSSL_malloc(), OPENSSL_zalloc(), OPENSSL_realloc(), 221*4724848cSchristosOPENSSL_clear_realloc(), 222*4724848cSchristosCRYPTO_malloc(), CRYPTO_zalloc(), CRYPTO_realloc(), 223*4724848cSchristosCRYPTO_clear_realloc(), 224*4724848cSchristosOPENSSL_buf2hexstr(), OPENSSL_hexstr2buf(), 225*4724848cSchristosOPENSSL_strdup(), and OPENSSL_strndup() 226*4724848cSchristosreturn a pointer to allocated memory or NULL on error. 227*4724848cSchristos 228*4724848cSchristosCRYPTO_set_mem_functions() and CRYPTO_set_mem_debug() 229*4724848cSchristosreturn 1 on success or 0 on failure (almost 230*4724848cSchristosalways because allocations have already happened). 231*4724848cSchristos 232*4724848cSchristosCRYPTO_mem_ctrl() returns -1 if an error occurred, otherwise the 233*4724848cSchristosprevious value of the mode. 234*4724848cSchristos 235*4724848cSchristosOPENSSL_mem_debug_push() and OPENSSL_mem_debug_pop() 236*4724848cSchristosreturn 1 on success or 0 on failure. 237*4724848cSchristos 238*4724848cSchristos=head1 NOTES 239*4724848cSchristos 240*4724848cSchristosWhile it's permitted to swap out only a few and not all the functions 241*4724848cSchristoswith CRYPTO_set_mem_functions(), it's recommended to swap them all out 242*4724848cSchristosat once. I<This applies specially if OpenSSL was built with the 243*4724848cSchristosconfiguration option> C<crypto-mdebug> I<enabled. In case, swapping out 244*4724848cSchristosonly, say, the malloc() implementation is outright dangerous.> 245*4724848cSchristos 246*4724848cSchristos=head1 COPYRIGHT 247*4724848cSchristos 248*4724848cSchristosCopyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. 249*4724848cSchristos 250*4724848cSchristosLicensed under the OpenSSL license (the "License"). You may not use 251*4724848cSchristosthis file except in compliance with the License. You can obtain a copy 252*4724848cSchristosin the file LICENSE in the source distribution or at 253*4724848cSchristosL<https://www.openssl.org/source/license.html>. 254*4724848cSchristos 255*4724848cSchristos=cut 256