OpenVPN
memdbg.h
Go to the documentation of this file.
1 /*
2  * OpenVPN -- An application to securely tunnel IP networks
3  * over a single UDP port, with support for SSL/TLS-based
4  * session authentication and key exchange,
5  * packet encryption, packet authentication, and
6  * packet compression.
7  *
8  * Copyright (C) 2002-2024 OpenVPN Inc <sales@openvpn.net>
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License version 2
12  * as published by the Free Software Foundation.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License along
20  * with this program; if not, write to the Free Software Foundation, Inc.,
21  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
22  */
23 
24 #ifndef MEMDBG_H
25 #define MEMDBG_H
26 
27 /*
28  * Valgrind debugging support.
29  *
30  * Valgrind is a great tool for debugging memory issues,
31  * though it seems to generate a lot of warnings in OpenSSL
32  * about uninitialized data. To silence these warnings,
33  * I've put together a suppressions file
34  * in debug/valgrind-suppress.
35  *
36  * Also, grep for VALGRIND_MAKE_READABLE in the OpenVPN source.
37  * Because valgrind thinks that some of the data passed from
38  * OpenSSL back to OpenVPN is tainted due to being sourced
39  * from uninitialized data, we need to untaint it before use --
40  * otherwise we will get a lot of useless warnings.
41  *
42  * valgrind --tool=memcheck --error-limit=no --suppressions=debug/valgrind-suppress --gen-suppressions=yes ./openvpn ...
43  */
44 
45 #ifdef USE_VALGRIND
46 
47 #include <valgrind/memcheck.h>
48 
49 #define VALGRIND_MAKE_READABLE(addr, len)
50 
51 #else /* ifdef USE_VALGRIND */
52 
53 #define VALGRIND_MAKE_READABLE(addr, len)
54 
55 #endif
56 
57 #ifdef DMALLOC /* see ./configure options to enable */
58 
59 /*
60  * See ./configure options to enable dmalloc
61  * support for memory leak checking.
62  *
63  * The dmalloc package can be downloaded from:
64  *
65  * http://dmalloc.com/
66  *
67  * When dmalloc is installed and enabled,
68  * use this command prior to running openvpn:
69  *
70  * dmalloc -l dlog -i 100 low -p log-unknown
71  *
72  * Also, put this in your .bashrc file:
73  *
74  * function dmalloc { eval `command dmalloc -b $*`; }
75  *
76  * Or take a more low-level approach:
77  *
78  * export DMALLOC_OPTIONS="debug=0x4e48503,inter=100,log=dlog"
79  *
80  * NOTE: When building dmalloc you need to add something
81  * like this to dmalloc's settings.h -- it will allocate a static
82  * buffer to be used as the malloc arena:
83  *
84  * #define INTERNAL_MEMORY_SPACE (1024 * 1024 * 50)
85  */
86 
87 #include <dmalloc.h>
88 
89 #define openvpn_dmalloc(file, line, size) dmalloc_malloc((file), (line), (size), DMALLOC_FUNC_MALLOC, 0, 0)
90 
91 /*
92  * This #define will put the line number of the log
93  * file position where leaked memory was allocated instead
94  * of the source code file and line number. Make sure
95  * to increase the size of dmalloc's info tables,
96  * (MEMORY_TABLE_SIZE in settings.h)
97  * otherwise it might get overwhelmed by the large
98  * number of unique file/line combinations.
99  */
100 #if 0
101 #undef malloc
102 #define malloc(size) openvpn_dmalloc("logfile", x_msg_line_num, (size))
103 #endif
104 
105 #endif /* DMALLOC */
106 
107 /*
108  * Force buffers to be zeroed after allocation.
109  * For debugging only.
110  */
111 /*#define ZERO_BUFFER_ON_ALLOC*/
112 
113 #endif /* MEMDBG_H */