xref: /freebsd/contrib/unbound/util/fptr_wlist.h (revision 9cf5bc93)
1b7579f77SDag-Erling Smørgrav /*
2b7579f77SDag-Erling Smørgrav  * util/fptr_wlist.h - function pointer whitelists.
3b7579f77SDag-Erling Smørgrav  *
4b7579f77SDag-Erling Smørgrav  * Copyright (c) 2007, NLnet Labs. All rights reserved.
5b7579f77SDag-Erling Smørgrav  *
6b7579f77SDag-Erling Smørgrav  * This software is open source.
7b7579f77SDag-Erling Smørgrav  *
8b7579f77SDag-Erling Smørgrav  * Redistribution and use in source and binary forms, with or without
9b7579f77SDag-Erling Smørgrav  * modification, are permitted provided that the following conditions
10b7579f77SDag-Erling Smørgrav  * are met:
11b7579f77SDag-Erling Smørgrav  *
12b7579f77SDag-Erling Smørgrav  * Redistributions of source code must retain the above copyright notice,
13b7579f77SDag-Erling Smørgrav  * this list of conditions and the following disclaimer.
14b7579f77SDag-Erling Smørgrav  *
15b7579f77SDag-Erling Smørgrav  * Redistributions in binary form must reproduce the above copyright notice,
16b7579f77SDag-Erling Smørgrav  * this list of conditions and the following disclaimer in the documentation
17b7579f77SDag-Erling Smørgrav  * and/or other materials provided with the distribution.
18b7579f77SDag-Erling Smørgrav  *
19b7579f77SDag-Erling Smørgrav  * Neither the name of the NLNET LABS nor the names of its contributors may
20b7579f77SDag-Erling Smørgrav  * be used to endorse or promote products derived from this software without
21b7579f77SDag-Erling Smørgrav  * specific prior written permission.
22b7579f77SDag-Erling Smørgrav  *
23b7579f77SDag-Erling Smørgrav  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
2417d15b25SDag-Erling Smørgrav  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
2517d15b25SDag-Erling Smørgrav  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
2617d15b25SDag-Erling Smørgrav  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2717d15b25SDag-Erling Smørgrav  * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2817d15b25SDag-Erling Smørgrav  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
2917d15b25SDag-Erling Smørgrav  * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
3017d15b25SDag-Erling Smørgrav  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
3117d15b25SDag-Erling Smørgrav  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
3217d15b25SDag-Erling Smørgrav  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
3317d15b25SDag-Erling Smørgrav  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34b7579f77SDag-Erling Smørgrav  */
35b7579f77SDag-Erling Smørgrav 
36b7579f77SDag-Erling Smørgrav /**
37b7579f77SDag-Erling Smørgrav  * \file
38b7579f77SDag-Erling Smørgrav  *
39b7579f77SDag-Erling Smørgrav  * This file contains functions that check function pointers.
40b7579f77SDag-Erling Smørgrav  * The functions contain a whitelist of known good callback values.
41b7579f77SDag-Erling Smørgrav  * Any other values lead to an error.
42b7579f77SDag-Erling Smørgrav  *
43b7579f77SDag-Erling Smørgrav  * This prevent heap overflow based exploits, where the callback pointer
44b7579f77SDag-Erling Smørgrav  * is overwritten by a buffer overflow (apart from this defense, buffer
45b7579f77SDag-Erling Smørgrav  * overflows should be fixed of course).
46b7579f77SDag-Erling Smørgrav  *
47b7579f77SDag-Erling Smørgrav  * Function pointers are used in
48b7579f77SDag-Erling Smørgrav  * 	o network code callbacks.
49b7579f77SDag-Erling Smørgrav  * 	o rbtree, lruhash, region data manipulation
50b7579f77SDag-Erling Smørgrav  *		in lruhash, the assertions are before the critical regions.
51b7579f77SDag-Erling Smørgrav  *		in other places, assertions are before the callback.
52b7579f77SDag-Erling Smørgrav  * 	o module operations.
53b7579f77SDag-Erling Smørgrav  */
54b7579f77SDag-Erling Smørgrav 
55b7579f77SDag-Erling Smørgrav #ifndef UTIL_FPTR_WLIST_H
56b7579f77SDag-Erling Smørgrav #define UTIL_FPTR_WLIST_H
57b7579f77SDag-Erling Smørgrav #include "util/netevent.h"
58b7579f77SDag-Erling Smørgrav #include "util/storage/lruhash.h"
59b7579f77SDag-Erling Smørgrav #include "util/module.h"
60b7579f77SDag-Erling Smørgrav #include "util/tube.h"
61b7579f77SDag-Erling Smørgrav #include "services/mesh.h"
62b7579f77SDag-Erling Smørgrav 
63b7579f77SDag-Erling Smørgrav /**
64b7579f77SDag-Erling Smørgrav  * Macro to perform an assertion check for fptr wlist checks.
65b7579f77SDag-Erling Smørgrav  * Does not get disabled in optimize mode. Check adds security by layers.
66b7579f77SDag-Erling Smørgrav  */
67b7579f77SDag-Erling Smørgrav #if defined(EXPORT_ALL_SYMBOLS)
68b7579f77SDag-Erling Smørgrav #define fptr_ok(x) /* nothing, dll-exe memory layout on win disables it */
69b7579f77SDag-Erling Smørgrav #else
70b7579f77SDag-Erling Smørgrav #define fptr_ok(x) \
71b7579f77SDag-Erling Smørgrav 	do { if(!(x)) \
72b7579f77SDag-Erling Smørgrav 		fatal_exit("%s:%d: %s: pointer whitelist %s failed", \
73b7579f77SDag-Erling Smørgrav 		__FILE__, __LINE__, __func__, #x); \
74b7579f77SDag-Erling Smørgrav 	} while(0);
75b7579f77SDag-Erling Smørgrav #endif
76b7579f77SDag-Erling Smørgrav 
77b7579f77SDag-Erling Smørgrav /**
78b7579f77SDag-Erling Smørgrav  * Check function pointer whitelist for comm_point callback values.
79b7579f77SDag-Erling Smørgrav  *
80b7579f77SDag-Erling Smørgrav  * @param fptr: function pointer to check.
81b7579f77SDag-Erling Smørgrav  * @return false if not in whitelist.
82b7579f77SDag-Erling Smørgrav  */
833005e0a3SDag-Erling Smørgrav int fptr_whitelist_comm_point(comm_point_callback_type *fptr);
84b7579f77SDag-Erling Smørgrav 
85b7579f77SDag-Erling Smørgrav /**
86b7579f77SDag-Erling Smørgrav  * Check function pointer whitelist for raw comm_point callback values.
87b7579f77SDag-Erling Smørgrav  *
88b7579f77SDag-Erling Smørgrav  * @param fptr: function pointer to check.
89b7579f77SDag-Erling Smørgrav  * @return false if not in whitelist.
90b7579f77SDag-Erling Smørgrav  */
913005e0a3SDag-Erling Smørgrav int fptr_whitelist_comm_point_raw(comm_point_callback_type *fptr);
92b7579f77SDag-Erling Smørgrav 
93b7579f77SDag-Erling Smørgrav /**
94b7579f77SDag-Erling Smørgrav  * Check function pointer whitelist for comm_timer callback values.
95b7579f77SDag-Erling Smørgrav  *
96b7579f77SDag-Erling Smørgrav  * @param fptr: function pointer to check.
97b7579f77SDag-Erling Smørgrav  * @return false if not in whitelist.
98b7579f77SDag-Erling Smørgrav  */
99b7579f77SDag-Erling Smørgrav int fptr_whitelist_comm_timer(void (*fptr)(void*));
100b7579f77SDag-Erling Smørgrav 
101b7579f77SDag-Erling Smørgrav /**
102b7579f77SDag-Erling Smørgrav  * Check function pointer whitelist for comm_signal callback values.
103b7579f77SDag-Erling Smørgrav  *
104b7579f77SDag-Erling Smørgrav  * @param fptr: function pointer to check.
105b7579f77SDag-Erling Smørgrav  * @return false if not in whitelist.
106b7579f77SDag-Erling Smørgrav  */
107b7579f77SDag-Erling Smørgrav int fptr_whitelist_comm_signal(void (*fptr)(int, void*));
108b7579f77SDag-Erling Smørgrav 
109b7579f77SDag-Erling Smørgrav /**
110b7579f77SDag-Erling Smørgrav  * Check function pointer whitelist for start_accept callback values.
111b7579f77SDag-Erling Smørgrav  *
112b7579f77SDag-Erling Smørgrav  * @param fptr: function pointer to check.
113b7579f77SDag-Erling Smørgrav  * @return false if not in whitelist.
114b7579f77SDag-Erling Smørgrav  */
115b7579f77SDag-Erling Smørgrav int fptr_whitelist_start_accept(void (*fptr)(void*));
116b7579f77SDag-Erling Smørgrav 
117b7579f77SDag-Erling Smørgrav /**
118b7579f77SDag-Erling Smørgrav  * Check function pointer whitelist for stop_accept callback values.
119b7579f77SDag-Erling Smørgrav  *
120b7579f77SDag-Erling Smørgrav  * @param fptr: function pointer to check.
121b7579f77SDag-Erling Smørgrav  * @return false if not in whitelist.
122b7579f77SDag-Erling Smørgrav  */
123b7579f77SDag-Erling Smørgrav int fptr_whitelist_stop_accept(void (*fptr)(void*));
124b7579f77SDag-Erling Smørgrav 
125b7579f77SDag-Erling Smørgrav /**
126b7579f77SDag-Erling Smørgrav  * Check function pointer whitelist for event structure callback values.
127b7579f77SDag-Erling Smørgrav  * This is not called by libevent itself, but checked by netevent.
128b7579f77SDag-Erling Smørgrav  *
129b7579f77SDag-Erling Smørgrav  * @param fptr: function pointer to check.
130b7579f77SDag-Erling Smørgrav  * @return false if not in whitelist.
131b7579f77SDag-Erling Smørgrav  */
132b7579f77SDag-Erling Smørgrav int fptr_whitelist_event(void (*fptr)(int, short, void *));
133b7579f77SDag-Erling Smørgrav 
134b7579f77SDag-Erling Smørgrav /**
135b7579f77SDag-Erling Smørgrav  * Check function pointer whitelist for pending udp callback values.
136b7579f77SDag-Erling Smørgrav  *
137b7579f77SDag-Erling Smørgrav  * @param fptr: function pointer to check.
138b7579f77SDag-Erling Smørgrav  * @return false if not in whitelist.
139b7579f77SDag-Erling Smørgrav  */
1403005e0a3SDag-Erling Smørgrav int fptr_whitelist_pending_udp(comm_point_callback_type *fptr);
141b7579f77SDag-Erling Smørgrav 
142b7579f77SDag-Erling Smørgrav /**
143b7579f77SDag-Erling Smørgrav  * Check function pointer whitelist for pending tcp callback values.
144b7579f77SDag-Erling Smørgrav  *
145b7579f77SDag-Erling Smørgrav  * @param fptr: function pointer to check.
146b7579f77SDag-Erling Smørgrav  * @return false if not in whitelist.
147b7579f77SDag-Erling Smørgrav  */
1483005e0a3SDag-Erling Smørgrav int fptr_whitelist_pending_tcp(comm_point_callback_type *fptr);
149b7579f77SDag-Erling Smørgrav 
150b7579f77SDag-Erling Smørgrav /**
151b7579f77SDag-Erling Smørgrav  * Check function pointer whitelist for serviced query callback values.
152b7579f77SDag-Erling Smørgrav  *
153b7579f77SDag-Erling Smørgrav  * @param fptr: function pointer to check.
154b7579f77SDag-Erling Smørgrav  * @return false if not in whitelist.
155b7579f77SDag-Erling Smørgrav  */
1563005e0a3SDag-Erling Smørgrav int fptr_whitelist_serviced_query(comm_point_callback_type *fptr);
157b7579f77SDag-Erling Smørgrav 
158b7579f77SDag-Erling Smørgrav /**
159b7579f77SDag-Erling Smørgrav  * Check function pointer whitelist for rbtree cmp callback values.
160b7579f77SDag-Erling Smørgrav  *
161b7579f77SDag-Erling Smørgrav  * @param fptr: function pointer to check.
162b7579f77SDag-Erling Smørgrav  * @return false if not in whitelist.
163b7579f77SDag-Erling Smørgrav  */
164b7579f77SDag-Erling Smørgrav int fptr_whitelist_rbtree_cmp(int (*fptr) (const void *, const void *));
165b7579f77SDag-Erling Smørgrav 
166b7579f77SDag-Erling Smørgrav /**
167b7579f77SDag-Erling Smørgrav  * Check function pointer whitelist for lruhash sizefunc callback values.
168b7579f77SDag-Erling Smørgrav  *
169b7579f77SDag-Erling Smørgrav  * @param fptr: function pointer to check.
170b7579f77SDag-Erling Smørgrav  * @return false if not in whitelist.
171b7579f77SDag-Erling Smørgrav  */
1723005e0a3SDag-Erling Smørgrav int fptr_whitelist_hash_sizefunc(lruhash_sizefunc_type fptr);
173b7579f77SDag-Erling Smørgrav 
174b7579f77SDag-Erling Smørgrav /**
175b7579f77SDag-Erling Smørgrav  * Check function pointer whitelist for lruhash compfunc callback values.
176b7579f77SDag-Erling Smørgrav  *
177b7579f77SDag-Erling Smørgrav  * @param fptr: function pointer to check.
178b7579f77SDag-Erling Smørgrav  * @return false if not in whitelist.
179b7579f77SDag-Erling Smørgrav  */
1803005e0a3SDag-Erling Smørgrav int fptr_whitelist_hash_compfunc(lruhash_compfunc_type fptr);
181b7579f77SDag-Erling Smørgrav 
182b7579f77SDag-Erling Smørgrav /**
183b7579f77SDag-Erling Smørgrav  * Check function pointer whitelist for lruhash delkeyfunc callback values.
184b7579f77SDag-Erling Smørgrav  *
185b7579f77SDag-Erling Smørgrav  * @param fptr: function pointer to check.
186b7579f77SDag-Erling Smørgrav  * @return false if not in whitelist.
187b7579f77SDag-Erling Smørgrav  */
1883005e0a3SDag-Erling Smørgrav int fptr_whitelist_hash_delkeyfunc(lruhash_delkeyfunc_type fptr);
189b7579f77SDag-Erling Smørgrav 
190b7579f77SDag-Erling Smørgrav /**
191b7579f77SDag-Erling Smørgrav  * Check function pointer whitelist for lruhash deldata callback values.
192b7579f77SDag-Erling Smørgrav  *
193b7579f77SDag-Erling Smørgrav  * @param fptr: function pointer to check.
194b7579f77SDag-Erling Smørgrav  * @return false if not in whitelist.
195b7579f77SDag-Erling Smørgrav  */
1963005e0a3SDag-Erling Smørgrav int fptr_whitelist_hash_deldatafunc(lruhash_deldatafunc_type fptr);
197b7579f77SDag-Erling Smørgrav 
198b7579f77SDag-Erling Smørgrav /**
199b7579f77SDag-Erling Smørgrav  * Check function pointer whitelist for lruhash markdel callback values.
200b7579f77SDag-Erling Smørgrav  *
201b7579f77SDag-Erling Smørgrav  * @param fptr: function pointer to check.
202b7579f77SDag-Erling Smørgrav  * @return false if not in whitelist.
203b7579f77SDag-Erling Smørgrav  */
2043005e0a3SDag-Erling Smørgrav int fptr_whitelist_hash_markdelfunc(lruhash_markdelfunc_type fptr);
205b7579f77SDag-Erling Smørgrav 
206b7579f77SDag-Erling Smørgrav /**
207b7579f77SDag-Erling Smørgrav  * Check function pointer whitelist for module_env send_query callback values.
208b7579f77SDag-Erling Smørgrav  *
209b7579f77SDag-Erling Smørgrav  * @param fptr: function pointer to check.
210b7579f77SDag-Erling Smørgrav  * @return false if not in whitelist.
211b7579f77SDag-Erling Smørgrav  */
212b7579f77SDag-Erling Smørgrav int fptr_whitelist_modenv_send_query(struct outbound_entry* (*fptr)(
213bc892140SDag-Erling Smørgrav 	struct query_info* qinfo, uint16_t flags, int dnssec, int want_dnssec,
214*9cf5bc93SCy Schubert 	int nocaps, int check_ratelimit, struct sockaddr_storage* addr,
215*9cf5bc93SCy Schubert 	socklen_t addrlen, uint8_t* zone, size_t zonelen, int tcp_upstream,
216*9cf5bc93SCy Schubert 	int ssl_upstream, char* tls_auth_name, struct module_qstate* q,
217*9cf5bc93SCy Schubert 	int* was_ratelimited));
218b7579f77SDag-Erling Smørgrav 
219b7579f77SDag-Erling Smørgrav /**
220b7579f77SDag-Erling Smørgrav  * Check function pointer whitelist for module_env detach_subs callback values.
221b7579f77SDag-Erling Smørgrav  *
222b7579f77SDag-Erling Smørgrav  * @param fptr: function pointer to check.
223b7579f77SDag-Erling Smørgrav  * @return false if not in whitelist.
224b7579f77SDag-Erling Smørgrav  */
225b7579f77SDag-Erling Smørgrav int fptr_whitelist_modenv_detach_subs(void (*fptr)(
226b7579f77SDag-Erling Smørgrav 	struct module_qstate* qstate));
227b7579f77SDag-Erling Smørgrav 
228b7579f77SDag-Erling Smørgrav /**
229b7579f77SDag-Erling Smørgrav  * Check function pointer whitelist for module_env attach_sub callback values.
230b7579f77SDag-Erling Smørgrav  *
231b7579f77SDag-Erling Smørgrav  * @param fptr: function pointer to check.
232b7579f77SDag-Erling Smørgrav  * @return false if not in whitelist.
233b7579f77SDag-Erling Smørgrav  */
234b7579f77SDag-Erling Smørgrav int fptr_whitelist_modenv_attach_sub(int (*fptr)(
235b7579f77SDag-Erling Smørgrav 	struct module_qstate* qstate, struct query_info* qinfo,
236ff825849SDag-Erling Smørgrav 	uint16_t qflags, int prime, int valrec, struct module_qstate** newq));
237b7579f77SDag-Erling Smørgrav 
238b7579f77SDag-Erling Smørgrav /**
239c7f4d7adSDag-Erling Smørgrav  * Check function pointer whitelist for module_env add_sub callback values.
240c7f4d7adSDag-Erling Smørgrav  *
241c7f4d7adSDag-Erling Smørgrav  * @param fptr: function pointer to check.
242c7f4d7adSDag-Erling Smørgrav  * @return false if not in whitelist.
243c7f4d7adSDag-Erling Smørgrav  */
244c7f4d7adSDag-Erling Smørgrav int fptr_whitelist_modenv_add_sub(int (*fptr)(struct module_qstate* qstate,
245c7f4d7adSDag-Erling Smørgrav 	struct query_info* qinfo, uint16_t qflags, int prime, int valrec,
246c7f4d7adSDag-Erling Smørgrav 	struct module_qstate** newq, struct mesh_state** sub));
247c7f4d7adSDag-Erling Smørgrav /**
248b7579f77SDag-Erling Smørgrav  * Check function pointer whitelist for module_env kill_sub callback values.
249b7579f77SDag-Erling Smørgrav  *
250b7579f77SDag-Erling Smørgrav  * @param fptr: function pointer to check.
251b7579f77SDag-Erling Smørgrav  * @return false if not in whitelist.
252b7579f77SDag-Erling Smørgrav  */
253b7579f77SDag-Erling Smørgrav int fptr_whitelist_modenv_kill_sub(void (*fptr)(struct module_qstate* newq));
254b7579f77SDag-Erling Smørgrav 
255b7579f77SDag-Erling Smørgrav /**
256b7579f77SDag-Erling Smørgrav  * Check function pointer whitelist for module_env detect_cycle callback values.
257b7579f77SDag-Erling Smørgrav  *
258b7579f77SDag-Erling Smørgrav  * @param fptr: function pointer to check.
259b7579f77SDag-Erling Smørgrav  * @return false if not in whitelist.
260b7579f77SDag-Erling Smørgrav  */
261b7579f77SDag-Erling Smørgrav int fptr_whitelist_modenv_detect_cycle(int (*fptr)(
262b7579f77SDag-Erling Smørgrav 	struct module_qstate* qstate, struct query_info* qinfo,
263ff825849SDag-Erling Smørgrav 	uint16_t flags, int prime, int valrec));
264b7579f77SDag-Erling Smørgrav 
265b7579f77SDag-Erling Smørgrav /**
266b7579f77SDag-Erling Smørgrav  * Check function pointer whitelist for module init call values.
267b7579f77SDag-Erling Smørgrav  *
268b7579f77SDag-Erling Smørgrav  * @param fptr: function pointer to check.
269b7579f77SDag-Erling Smørgrav  * @return false if not in whitelist.
270b7579f77SDag-Erling Smørgrav  */
271b7579f77SDag-Erling Smørgrav int fptr_whitelist_mod_init(int (*fptr)(struct module_env* env, int id));
272b7579f77SDag-Erling Smørgrav 
273b7579f77SDag-Erling Smørgrav /**
274b7579f77SDag-Erling Smørgrav  * Check function pointer whitelist for module deinit call values.
275b7579f77SDag-Erling Smørgrav  *
276b7579f77SDag-Erling Smørgrav  * @param fptr: function pointer to check.
277b7579f77SDag-Erling Smørgrav  * @return false if not in whitelist.
278b7579f77SDag-Erling Smørgrav  */
279b7579f77SDag-Erling Smørgrav int fptr_whitelist_mod_deinit(void (*fptr)(struct module_env* env, int id));
280b7579f77SDag-Erling Smørgrav 
281b7579f77SDag-Erling Smørgrav /**
282b7579f77SDag-Erling Smørgrav  * Check function pointer whitelist for module operate call values.
283b7579f77SDag-Erling Smørgrav  *
284b7579f77SDag-Erling Smørgrav  * @param fptr: function pointer to check.
285b7579f77SDag-Erling Smørgrav  * @return false if not in whitelist.
286b7579f77SDag-Erling Smørgrav  */
287b7579f77SDag-Erling Smørgrav int fptr_whitelist_mod_operate(void (*fptr)(struct module_qstate* qstate,
288b7579f77SDag-Erling Smørgrav 	enum module_ev event, int id, struct outbound_entry* outbound));
289b7579f77SDag-Erling Smørgrav 
290b7579f77SDag-Erling Smørgrav /**
291b7579f77SDag-Erling Smørgrav  * Check function pointer whitelist for module inform_super call values.
292b7579f77SDag-Erling Smørgrav  *
293b7579f77SDag-Erling Smørgrav  * @param fptr: function pointer to check.
294b7579f77SDag-Erling Smørgrav  * @return false if not in whitelist.
295b7579f77SDag-Erling Smørgrav  */
296b7579f77SDag-Erling Smørgrav int fptr_whitelist_mod_inform_super(void (*fptr)(
297b7579f77SDag-Erling Smørgrav 	struct module_qstate* qstate, int id, struct module_qstate* super));
298b7579f77SDag-Erling Smørgrav 
299b7579f77SDag-Erling Smørgrav /**
300b7579f77SDag-Erling Smørgrav  * Check function pointer whitelist for module clear call values.
301b7579f77SDag-Erling Smørgrav  *
302b7579f77SDag-Erling Smørgrav  * @param fptr: function pointer to check.
303b7579f77SDag-Erling Smørgrav  * @return false if not in whitelist.
304b7579f77SDag-Erling Smørgrav  */
305b7579f77SDag-Erling Smørgrav int fptr_whitelist_mod_clear(void (*fptr)(struct module_qstate* qstate,
306b7579f77SDag-Erling Smørgrav 	int id));
307b7579f77SDag-Erling Smørgrav 
308b7579f77SDag-Erling Smørgrav /**
309b7579f77SDag-Erling Smørgrav  * Check function pointer whitelist for module get_mem call values.
310b7579f77SDag-Erling Smørgrav  *
311b7579f77SDag-Erling Smørgrav  * @param fptr: function pointer to check.
312b7579f77SDag-Erling Smørgrav  * @return false if not in whitelist.
313b7579f77SDag-Erling Smørgrav  */
314b7579f77SDag-Erling Smørgrav int fptr_whitelist_mod_get_mem(size_t (*fptr)(struct module_env* env, int id));
315b7579f77SDag-Erling Smørgrav 
316b7579f77SDag-Erling Smørgrav /**
317b7579f77SDag-Erling Smørgrav  * Check function pointer whitelist for alloc clear on id overflow call values.
318b7579f77SDag-Erling Smørgrav  *
319b7579f77SDag-Erling Smørgrav  * @param fptr: function pointer to check.
320b7579f77SDag-Erling Smørgrav  * @return false if not in whitelist.
321b7579f77SDag-Erling Smørgrav  */
322b7579f77SDag-Erling Smørgrav int fptr_whitelist_alloc_cleanup(void (*fptr)(void*));
323b7579f77SDag-Erling Smørgrav 
324b7579f77SDag-Erling Smørgrav /**
325b7579f77SDag-Erling Smørgrav  * Check function pointer whitelist for tube listen handler values.
326b7579f77SDag-Erling Smørgrav  *
327b7579f77SDag-Erling Smørgrav  * @param fptr: function pointer to check.
328b7579f77SDag-Erling Smørgrav  * @return false if not in whitelist.
329b7579f77SDag-Erling Smørgrav  */
3303005e0a3SDag-Erling Smørgrav int fptr_whitelist_tube_listen(tube_callback_type* fptr);
331b7579f77SDag-Erling Smørgrav 
332b7579f77SDag-Erling Smørgrav /**
333b7579f77SDag-Erling Smørgrav  * Check function pointer whitelist for mesh state callback values.
334b7579f77SDag-Erling Smørgrav  *
335b7579f77SDag-Erling Smørgrav  * @param fptr: function pointer to check.
336b7579f77SDag-Erling Smørgrav  * @return false if not in whitelist.
337b7579f77SDag-Erling Smørgrav  */
3383005e0a3SDag-Erling Smørgrav int fptr_whitelist_mesh_cb(mesh_cb_func_type fptr);
339b7579f77SDag-Erling Smørgrav 
340b7579f77SDag-Erling Smørgrav /**
341b7579f77SDag-Erling Smørgrav  * Check function pointer whitelist for config_get_option func values.
342b7579f77SDag-Erling Smørgrav  * @param fptr: function pointer to check.
343b7579f77SDag-Erling Smørgrav  * @return false if not in whitelist.
344b7579f77SDag-Erling Smørgrav  */
345b7579f77SDag-Erling Smørgrav int fptr_whitelist_print_func(void (*fptr)(char*,void*));
346b7579f77SDag-Erling Smørgrav 
347bc892140SDag-Erling Smørgrav /**
348bc892140SDag-Erling Smørgrav  * Check function pointer whitelist for inplace_cb_reply,
349bc892140SDag-Erling Smørgrav  * inplace_cb_reply_cache, inplace_cb_reply_local and inplace_cb_reply_servfail
350bc892140SDag-Erling Smørgrav  * func values.
351bc892140SDag-Erling Smørgrav  * @param fptr: function pointer to check.
352bc892140SDag-Erling Smørgrav  * @param type: the type of the callback function.
353bc892140SDag-Erling Smørgrav  * @return false if not in whitelist.
354bc892140SDag-Erling Smørgrav  */
3553005e0a3SDag-Erling Smørgrav int fptr_whitelist_inplace_cb_reply_generic(inplace_cb_reply_func_type* fptr,
356bc892140SDag-Erling Smørgrav 	enum inplace_cb_list_type type);
357bc892140SDag-Erling Smørgrav 
358bc892140SDag-Erling Smørgrav /**
359bc892140SDag-Erling Smørgrav  * Check function pointer whitelist for inplace_cb_query func values.
360bc892140SDag-Erling Smørgrav  * @param fptr: function pointer to check.
361bc892140SDag-Erling Smørgrav  * @return false if not in whitelist.
362bc892140SDag-Erling Smørgrav  */
3633005e0a3SDag-Erling Smørgrav int fptr_whitelist_inplace_cb_query(inplace_cb_query_func_type* fptr);
364bc892140SDag-Erling Smørgrav 
36565b390aaSDag-Erling Smørgrav /**
36665b390aaSDag-Erling Smørgrav  * Check function pointer whitelist for inplace_cb_edns_back_parsed func values.
36765b390aaSDag-Erling Smørgrav  * @param fptr: function pointer to check.
36865b390aaSDag-Erling Smørgrav  * @return false if not in whitelist.
36965b390aaSDag-Erling Smørgrav  */
37065b390aaSDag-Erling Smørgrav int fptr_whitelist_inplace_cb_edns_back_parsed(
37165b390aaSDag-Erling Smørgrav 	inplace_cb_edns_back_parsed_func_type* fptr);
37265b390aaSDag-Erling Smørgrav 
37365b390aaSDag-Erling Smørgrav /**
37465b390aaSDag-Erling Smørgrav  * Check function pointer whitelist for inplace_cb_query_response func values.
37565b390aaSDag-Erling Smørgrav  * @param fptr: function pointer to check.
37665b390aaSDag-Erling Smørgrav  * @return false if not in whitelist.
37765b390aaSDag-Erling Smørgrav  */
37865b390aaSDag-Erling Smørgrav int fptr_whitelist_inplace_cb_query_response(
37965b390aaSDag-Erling Smørgrav 	inplace_cb_query_response_func_type* fptr);
38065b390aaSDag-Erling Smørgrav 
381091e9e46SCy Schubert /**
382091e9e46SCy Schubert  * Check function pointer whitelist for serve_expired_lookup func values.
383091e9e46SCy Schubert  * @param fptr: function pointer to check.
384091e9e46SCy Schubert  * @return false if not in whitelist.
385091e9e46SCy Schubert  */
386091e9e46SCy Schubert int fptr_whitelist_serve_expired_lookup(serve_expired_lookup_func_type* fptr);
387091e9e46SCy Schubert 
388b7579f77SDag-Erling Smørgrav /** Due to module breakage by fptr wlist, these test app declarations
389b7579f77SDag-Erling Smørgrav  * are presented here */
390b7579f77SDag-Erling Smørgrav /**
391b7579f77SDag-Erling Smørgrav  * compare two order_ids from lock-verify test app
392b7579f77SDag-Erling Smørgrav  * @param e1: first order_id
393b7579f77SDag-Erling Smørgrav  * @param e2: second order_id
394b7579f77SDag-Erling Smørgrav  * @return compare code -1, 0, +1 (like memcmp).
395b7579f77SDag-Erling Smørgrav  */
396b7579f77SDag-Erling Smørgrav int order_lock_cmp(const void* e1, const void* e2);
397b7579f77SDag-Erling Smørgrav 
398b7579f77SDag-Erling Smørgrav /**
399b7579f77SDag-Erling Smørgrav  * compare two codeline structs for rbtree from memstats test app
400b7579f77SDag-Erling Smørgrav  * @param a: codeline
401b7579f77SDag-Erling Smørgrav  * @param b: codeline
402b7579f77SDag-Erling Smørgrav  * @return compare code -1, 0, +1 (like memcmp).
403b7579f77SDag-Erling Smørgrav  */
404b7579f77SDag-Erling Smørgrav int codeline_cmp(const void* a, const void* b);
405b7579f77SDag-Erling Smørgrav 
406b7579f77SDag-Erling Smørgrav /** compare two replay_vars */
407b7579f77SDag-Erling Smørgrav int replay_var_compare(const void* a, const void* b);
408b7579f77SDag-Erling Smørgrav 
409b7579f77SDag-Erling Smørgrav #endif /* UTIL_FPTR_WLIST_H */
410