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