Document the slight change in CRYPTO_mem_ctrl()
[openssl.git] / doc / crypto / OPENSSL_malloc.pod
1 =pod
2
3 =head1 NAME
4
5 OPENSSL_malloc_init,
6 OPENSSL_malloc, OPENSSL_zalloc, OPENSSL_realloc, OPENSSL_free,
7 OPENSSL_clear_realloc, OPENSSL_clear_free, OPENSSL_cleanse,
8 CRYPTO_malloc, CRYPTO_zalloc, CRYPTO_realloc, CRYPTO_free,
9 OPENSSL_strdup, OPENSSL_strndup,
10 OPENSSL_memdup, OPENSSL_strlcpy, OPENSSL_strlcat,
11 OPENSSL_hexstr2buf, OPENSSL_buf2hexstr, OPENSSL_hexchar2int,
12 CRYPTO_strdup, CRYPTO_strndup,
13 OPENSSL_mem_debug_push, OPENSSL_mem_debug_pop,
14 CRYPTO_mem_debug_push, CRYPTO_mem_debug_pop,
15 CRYPTO_clear_realloc, CRYPTO_clear_free,
16 CRYPTO_get_mem_functions, CRYPTO_set_mem_functions,
17 CRYPTO_set_mem_debug, CRYPTO_mem_ctrl,
18 CRYPTO_mem_leaks, CRYPTO_mem_leaks_fp - Memory allocation functions
19
20 =head1 SYNOPSIS
21
22  #include <openssl/crypto.h>
23
24  int OPENSSL_malloc_init(void)
25
26  void *OPENSSL_malloc(size_t num)
27  void *OPENSSL_zalloc(size_t num)
28  void *OPENSSL_realloc(void *addr, size_t num)
29  void OPENSSL_free(void *addr)
30  char *OPENSSL_strdup(const char *str)
31  char *OPENSSL_strndup(const char *str, size_t s)
32  size_t OPENSSL_strlcat(char *dst, const char *src, size_t size);
33  size_t OPENSSL_strlcpy(char *dst, const char *src, size_t size);
34  void *OPENSSL_memdup(void *data, size_t s)
35  void *OPENSSL_clear_realloc(void *p, size_t old_len, size_t num)
36  void OPENSSL_clear_free(void *str, size_t num)
37  void OPENSSL_cleanse(void *ptr, size_t len);
38
39  unsigned char *OPENSSL_hexstr2buf(const char *str, long *len);
40  char *OPENSSL_buf2hexstr(const unsigned char *buffer, long len);
41  int OPENSSL_hexchar2int(unsigned char c);
42
43  void *CRYPTO_malloc(size_t num, const char *file, int line)
44  void *CRYPTO_zalloc(size_t num, const char *file, int line)
45  void *CRYPTO_realloc(void *p, size_t num, const char *file, int line)
46  void CRYPTO_free(void *str, const char *, int)
47  char *CRYPTO_strdup(const char *p, const char *file, int line)
48  char *CRYPTO_strndup(const char *p, size_t num, const char *file, int line)
49  void *CRYPTO_clear_realloc(void *p, size_t old_len, size_t num, const char *file, int line)
50  void CRYPTO_clear_free(void *str, size_t num, const char *, int)
51
52  void CRYPTO_get_mem_functions(
53          void *(**m)(size_t, const char *, int),
54          void *(**r)(void *, size_t, const char *, int),
55          void (**f)(void *, const char *, int))
56  int CRYPTO_set_mem_functions(
57          void *(*m)(size_t, const char *, int),
58          void *(*r)(void *, size_t, const char *, int),
59          void (*f)(void *, const char *, int))
60
61  int CRYPTO_set_mem_debug(int onoff)
62
63  int CRYPTO_mem_ctrl(int mode);
64
65  int OPENSSL_mem_debug_push(const char *info)
66  int OPENSSL_mem_debug_pop(void);
67
68  int CRYPTO_mem_debug_push(const char *info, const char *file, int line);
69  int CRYPTO_mem_debug_pop(void);
70
71  void CRYPTO_mem_leaks(BIO *b);
72  void CRYPTO_mem_leaks_fp(FILE *fp);
73
74 =head1 DESCRIPTION
75
76 OpenSSL memory allocation is handled by the B<OPENSSL_xxx> API. These are
77 generally macro's that add the standard C B<__FILE__> and B<__LINE__>
78 parameters and call a lower-level B<CRYPTO_xxx> API.
79 Some functions do not add those parameters, but exist for consistency.
80
81 OPENSSL_malloc_init() sets the lower-level memory allocation functions
82 to their default implementation.
83 It is generally not necessary to call this, except perhaps in certain
84 shared-library situations.
85
86 OPENSSL_malloc(), OPENSSL_realloc(), and OPENSSL_free() are like the
87 C malloc(), realloc(), and free() functions.
88 OPENSSL_zalloc() calls memset() to zero the memory before returning.
89
90 OPENSSL_clear_realloc() and OPENSSL_clear_free() should be used
91 when the buffer at B<addr> holds sensitive information.
92 The old buffer is filled with zero's by calling OPENSSL_cleanse()
93 before ultimately calling OPENSSL_free().
94
95 OPENSSL_cleanse() fills B<ptr> of size B<len> with a string of 0's.
96 Use OPENSSL_cleanse() with care if the memory is a mapping of a file.
97 If the storage controller uses write compression, then its possible
98 that sensitive tail bytes will survive zeroization because the block of
99 zeros will be compressed. If the storage controller uses wear leveling,
100 then the old sensitive data will not be overwritten; rather, a block of
101 0's will be written at a new physical location.
102
103 OPENSSL_strdup(), OPENSSL_strndup() and OPENSSL_memdup() are like the
104 equivalent C functions, except that memory is allocated by calling the
105 OPENSSL_malloc() and should be released by calling OPENSSL_free().
106
107 OPENSSL_strlcpy(),
108 OPENSSL_strlcat() and OPENSSL_strnlen() are equivalents of the common C
109 library functions and are provided for portability.
110
111 OPENSSL_hexstr2buf() parses B<str> as a hex string and returns a
112 pointer to the parsed value. The memory is allocated by calling
113 OPENSSL_malloc() and should be released by calling OPENSSL_free().
114 If B<len> is not NULL, it is filled in with the output length.
115 Colons between two-character hex "bytes" are ignored.
116 An odd number of hex digits is an error.
117
118 OPENSSL_buf2hexstr() takes the specified buffer and length, and returns
119 a hex string for value, or NULL on error.
120 B<Buffer> cannot be NULL; if B<len> is 0 an empty string is returned.
121
122 OPENSSL_hexchar2int() converts a character to the hexadecimal equivalent,
123 or returns -1 on error.
124
125 If no allocations have been done, it is possible to "swap out" the default
126 implementations for OPENSSL_malloc(), OPENSSL_realloc and OPENSSL_free()
127 and replace them with alternate versions (hooks).
128 CRYPTO_get_mem_functions() function fills in the given arguments with the
129 function pointers for the current implementations.
130 With CRYPTO_set_mem_functions(), you can specify a different set of functions.
131 If any of B<m>, B<r>, or B<f> are NULL, then the function is not changed.
132
133 The default implementation can include some debugging capability (if enabled
134 at build-time).
135 This adds some overhead by keeping a list of all memory allocations, and
136 removes items from the list when they are free'd.
137 This is most useful for identifying memory leaks.
138 CRYPTO_set_mem_debug() turns this tracking on and off.  It is normally
139 called at startup, but can be called at any time.
140
141 CRYPTO_mem_ctrl() provides fine-grained control of memory leak tracking.
142 To enable tracking call CRYPTO_mem_ctrl() with a B<mode> argument of
143 the B<CRYPTO_MEM_CHECK_ON>.
144 To disable tracking call CRYPTO_mem_ctrl() with a B<mode> argument of
145 the B<CRYPTO_MEM_CHECK_OFF>.
146
147 While checking memory, it can be useful to store additional context
148 about what is being done.
149 For example, identifying the field names when parsing a complicated
150 data structure.
151 OPENSSL_mem_debug_push() (which calls CRYPTO_mem_debug_push())
152 attachs an identifying string to the allocation stack.
153 This must be a global or other static string; it is not copied.
154 OPENSSL_mem_debug_pop() removes identifying state from the stack.
155
156 At the end of the program, calling CRYPTO_mem_leaks() or
157 CRYPTO_mem_leaks_fp() will report all "leaked" memory, writing it
158 to the specified BIO B<b> or FILE B<fp>. These functions return 1 if
159 there are no leaks, 0 if there are leaks and -1 if an error occurred.
160
161 =head1 RETURN VALUES
162
163 OPENSSL_malloc_init(), OPENSSL_free(), OPENSSL_clear_free()
164 CRYPTO_free(), CRYPTO_clear_free() and CRYPTO_get_mem_functions()
165 return no value.
166
167 CRYPTO_mem_leaks() and CRYPTO_mem_leaks_fp() return 1 if there
168 are no leaks, 0 if there are leaks and -1 if an error occurred.
169
170 OPENSSL_malloc(), OPENSSL_zalloc(), OPENSSL_realloc(),
171 OPENSSL_clear_realloc(),
172 CRYPTO_malloc(), CRYPTO_zalloc(), CRYPTO_realloc(),
173 CRYPTO_clear_realloc(),
174 OPENSSL_buf2hexstr(), OPENSSL_hexstr2buf(),
175 OPENSSL_strdup(), and OPENSSL_strndup()
176 return a pointer to allocated memory or NULL on error.
177
178 CRYPTO_set_mem_functions() and CRYPTO_set_mem_debug()
179 return 1 on success or 0 on failure (almost
180 always because allocations have already happened).
181
182 CRYPTO_mem_ctrl() returns -1 if an error occured, otherwise the
183 previous value of the mode.
184
185 OPENSSL_mem_debug_push() and OPENSSL_mem_debug_pop()
186 return 1 on success or 0 on failure.
187
188 =head1 NOTES
189
190 While it's permitted to swap out only a few and not all the functions
191 with CRYPTO_set_mem_functions(), it's recommended to swap them all out
192 at once.  I<This applies specially if OpenSSL was built with the
193 configuration option> C<crypto-mdebug> I<enabled.  In case, swapping out
194 only, say, the malloc() implementation is outright dangerous.>
195
196 =head1 COPYRIGHT
197
198 Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
199
200 Licensed under the OpenSSL license (the "License").  You may not use
201 this file except in compliance with the License.  You can obtain a copy
202 in the file LICENSE in the source distribution or at
203 L<https://www.openssl.org/source/license.html>.
204
205 =cut