Fix referenses in section 3 manuals
[openssl.git] / doc / man3 / 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.  In order to have
139 any effect, is must be called before any of the allocation functions
140 (e.g., CRYPTO_malloc()) are called, and is therefore normally one of the
141 first lines of main() in an application.
142
143 CRYPTO_mem_ctrl() provides fine-grained control of memory leak tracking.
144 To enable tracking call CRYPTO_mem_ctrl() with a B<mode> argument of
145 the B<CRYPTO_MEM_CHECK_ON>.
146 To disable tracking call CRYPTO_mem_ctrl() with a B<mode> argument of
147 the B<CRYPTO_MEM_CHECK_OFF>.
148
149 While checking memory, it can be useful to store additional context
150 about what is being done.
151 For example, identifying the field names when parsing a complicated
152 data structure.
153 OPENSSL_mem_debug_push() (which calls CRYPTO_mem_debug_push())
154 attachs an identifying string to the allocation stack.
155 This must be a global or other static string; it is not copied.
156 OPENSSL_mem_debug_pop() removes identifying state from the stack.
157
158 At the end of the program, calling CRYPTO_mem_leaks() or
159 CRYPTO_mem_leaks_fp() will report all "leaked" memory, writing it
160 to the specified BIO B<b> or FILE B<fp>. These functions return 1 if
161 there are no leaks, 0 if there are leaks and -1 if an error occurred.
162
163 =head1 RETURN VALUES
164
165 OPENSSL_malloc_init(), OPENSSL_free(), OPENSSL_clear_free()
166 CRYPTO_free(), CRYPTO_clear_free() and CRYPTO_get_mem_functions()
167 return no value.
168
169 CRYPTO_mem_leaks() and CRYPTO_mem_leaks_fp() return 1 if there
170 are no leaks, 0 if there are leaks and -1 if an error occurred.
171
172 OPENSSL_malloc(), OPENSSL_zalloc(), OPENSSL_realloc(),
173 OPENSSL_clear_realloc(),
174 CRYPTO_malloc(), CRYPTO_zalloc(), CRYPTO_realloc(),
175 CRYPTO_clear_realloc(),
176 OPENSSL_buf2hexstr(), OPENSSL_hexstr2buf(),
177 OPENSSL_strdup(), and OPENSSL_strndup()
178 return a pointer to allocated memory or NULL on error.
179
180 CRYPTO_set_mem_functions() and CRYPTO_set_mem_debug()
181 return 1 on success or 0 on failure (almost
182 always because allocations have already happened).
183
184 CRYPTO_mem_ctrl() returns -1 if an error occurred, otherwise the
185 previous value of the mode.
186
187 OPENSSL_mem_debug_push() and OPENSSL_mem_debug_pop()
188 return 1 on success or 0 on failure.
189
190 =head1 NOTES
191
192 While it's permitted to swap out only a few and not all the functions
193 with CRYPTO_set_mem_functions(), it's recommended to swap them all out
194 at once.  I<This applies specially if OpenSSL was built with the
195 configuration option> C<crypto-mdebug> I<enabled.  In case, swapping out
196 only, say, the malloc() implementation is outright dangerous.>
197
198 =head1 COPYRIGHT
199
200 Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
201
202 Licensed under the OpenSSL license (the "License").  You may not use
203 this file except in compliance with the License.  You can obtain a copy
204 in the file LICENSE in the source distribution or at
205 L<https://www.openssl.org/source/license.html>.
206
207 =cut