Macros | Functions
fptr_wlist.h File Reference

This file contains functions that check function pointers. More...

#include "util/netevent.h"
#include "util/storage/lruhash.h"
#include "util/module.h"
#include "util/tube.h"
#include "services/mesh.h"

Macros

#define fptr_ok(x)
 Macro to perform an assertion check for fptr wlist checks. More...
 

Functions

int fptr_whitelist_comm_point (comm_point_callback_t *fptr)
 Check function pointer whitelist for comm_point callback values. More...
 
int fptr_whitelist_comm_point_raw (comm_point_callback_t *fptr)
 Check function pointer whitelist for raw comm_point callback values. More...
 
int fptr_whitelist_comm_timer (void(*fptr)(void *))
 Check function pointer whitelist for comm_timer callback values. More...
 
int fptr_whitelist_comm_signal (void(*fptr)(int, void *))
 Check function pointer whitelist for comm_signal callback values. More...
 
int fptr_whitelist_start_accept (void(*fptr)(void *))
 Check function pointer whitelist for start_accept callback values. More...
 
int fptr_whitelist_stop_accept (void(*fptr)(void *))
 Check function pointer whitelist for stop_accept callback values. More...
 
int fptr_whitelist_event (void(*fptr)(int, short, void *))
 Check function pointer whitelist for event structure callback values. More...
 
int fptr_whitelist_pending_udp (comm_point_callback_t *fptr)
 Check function pointer whitelist for pending udp callback values. More...
 
int fptr_whitelist_pending_tcp (comm_point_callback_t *fptr)
 Check function pointer whitelist for pending tcp callback values. More...
 
int fptr_whitelist_serviced_query (comm_point_callback_t *fptr)
 Check function pointer whitelist for serviced query callback values. More...
 
int fptr_whitelist_rbtree_cmp (int(*fptr)(const void *, const void *))
 Check function pointer whitelist for rbtree cmp callback values. More...
 
int fptr_whitelist_hash_sizefunc (lruhash_sizefunc_t fptr)
 Check function pointer whitelist for lruhash sizefunc callback values. More...
 
int fptr_whitelist_hash_compfunc (lruhash_compfunc_t fptr)
 Check function pointer whitelist for lruhash compfunc callback values. More...
 
int fptr_whitelist_hash_delkeyfunc (lruhash_delkeyfunc_t fptr)
 Check function pointer whitelist for lruhash delkeyfunc callback values. More...
 
int fptr_whitelist_hash_deldatafunc (lruhash_deldatafunc_t fptr)
 Check function pointer whitelist for lruhash deldata callback values. More...
 
int fptr_whitelist_hash_markdelfunc (lruhash_markdelfunc_t fptr)
 Check function pointer whitelist for lruhash markdel callback values. More...
 
int fptr_whitelist_modenv_send_query (struct outbound_entry *(*fptr)(uint8_t *qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, uint16_t flags, int dnssec, int want_dnssec, struct sockaddr_storage *addr, socklen_t addrlen, uint8_t *zone, size_t zonelen, struct module_qstate *q))
 Check function pointer whitelist for module_env send_query callback values. More...
 
int fptr_whitelist_modenv_detach_subs (void(*fptr)(struct module_qstate *qstate))
 Check function pointer whitelist for module_env detach_subs callback values. More...
 
int fptr_whitelist_modenv_attach_sub (int(*fptr)(struct module_qstate *qstate, struct query_info *qinfo, uint16_t qflags, int prime, struct module_qstate **newq))
 Check function pointer whitelist for module_env attach_sub callback values. More...
 
int fptr_whitelist_modenv_kill_sub (void(*fptr)(struct module_qstate *newq))
 Check function pointer whitelist for module_env kill_sub callback values. More...
 
int fptr_whitelist_modenv_detect_cycle (int(*fptr)(struct module_qstate *qstate, struct query_info *qinfo, uint16_t flags, int prime))
 Check function pointer whitelist for module_env detect_cycle callback values. More...
 
int fptr_whitelist_mod_init (int(*fptr)(struct module_env *env, int id))
 Check function pointer whitelist for module init call values. More...
 
int fptr_whitelist_mod_deinit (void(*fptr)(struct module_env *env, int id))
 Check function pointer whitelist for module deinit call values. More...
 
int fptr_whitelist_mod_operate (void(*fptr)(struct module_qstate *qstate, enum module_ev event, int id, struct outbound_entry *outbound))
 Check function pointer whitelist for module operate call values. More...
 
int fptr_whitelist_mod_inform_super (void(*fptr)(struct module_qstate *qstate, int id, struct module_qstate *super))
 Check function pointer whitelist for module inform_super call values. More...
 
int fptr_whitelist_mod_clear (void(*fptr)(struct module_qstate *qstate, int id))
 Check function pointer whitelist for module clear call values. More...
 
int fptr_whitelist_mod_get_mem (size_t(*fptr)(struct module_env *env, int id))
 Check function pointer whitelist for module get_mem call values. More...
 
int fptr_whitelist_alloc_cleanup (void(*fptr)(void *))
 Check function pointer whitelist for alloc clear on id overflow call values. More...
 
int fptr_whitelist_tube_listen (tube_callback_t *fptr)
 Check function pointer whitelist for tube listen handler values. More...
 
int fptr_whitelist_mesh_cb (mesh_cb_func_t fptr)
 Check function pointer whitelist for mesh state callback values. More...
 
int fptr_whitelist_print_func (void(*fptr)(char *, void *))
 Check function pointer whitelist for config_get_option func values. More...
 
int order_lock_cmp (const void *e1, const void *e2)
 Due to module breakage by fptr wlist, these test app declarations are presented here. More...
 
int codeline_cmp (const void *a, const void *b)
 compare two codeline structs for rbtree from memstats test app More...
 
int replay_var_compare (const void *a, const void *b)
 compare two replay_vars
 

Detailed Description

This file contains functions that check function pointers.

The functions contain a whitelist of known good callback values. Any other values lead to an error.

This prevent heap overflow based exploits, where the callback pointer is overwritten by a buffer overflow (apart from this defense, buffer overflows should be fixed of course).

Function pointers are used in o network code callbacks. o rbtree, lruhash, region data manipulation in lruhash, the assertions are before the critical regions. in other places, assertions are before the callback. o module operations.

Macro Definition Documentation

#define fptr_ok (   x)

Function Documentation

int fptr_whitelist_comm_point ( comm_point_callback_t fptr)

Check function pointer whitelist for comm_point callback values.

Parameters
fptr,:function pointer to check.
Returns
false if not in whitelist.

References outnet_tcp_cb(), outnet_udp_cb(), tube_handle_listen(), and worker_handle_request().

Referenced by comm_point_local_handle_callback(), comm_point_tcp_handle_callback(), comm_point_udp_ancil_callback(), comm_point_udp_callback(), and tcp_callback_reader().

int fptr_whitelist_comm_point_raw ( comm_point_callback_t fptr)

Check function pointer whitelist for raw comm_point callback values.

Parameters
fptr,:function pointer to check.
Returns
false if not in whitelist.

References remote_accept_callback(), remote_control_callback(), tube_handle_listen(), and tube_handle_write().

int fptr_whitelist_comm_timer ( void(*)(void *)  fptr)

Check function pointer whitelist for comm_timer callback values.

Parameters
fptr,:function pointer to check.
Returns
false if not in whitelist.

References outnet_tcptimer(), pending_udp_timer_cb(), pending_udp_timer_delay_cb(), worker_probe_timer_cb(), worker_stat_timer_cb(), and wsvc_cron_cb().

Referenced by comm_timer_create(), and time_passes().

int fptr_whitelist_comm_signal ( void(*)(int, void *)  fptr)

Check function pointer whitelist for comm_signal callback values.

Parameters
fptr,:function pointer to check.
Returns
false if not in whitelist.

References worker_sighandler().

Referenced by comm_signal_callback().

int fptr_whitelist_start_accept ( void(*)(void *)  fptr)

Check function pointer whitelist for start_accept callback values.

Parameters
fptr,:function pointer to check.
Returns
false if not in whitelist.

References worker_start_accept().

int fptr_whitelist_stop_accept ( void(*)(void *)  fptr)

Check function pointer whitelist for stop_accept callback values.

Parameters
fptr,:function pointer to check.
Returns
false if not in whitelist.

References worker_stop_accept().

Referenced by comm_point_perform_accept().

int fptr_whitelist_event ( void(*)(int, short, void *)  fptr)

Check function pointer whitelist for event structure callback values.

This is not called by libevent itself, but checked by netevent.

Parameters
fptr,:function pointer to check.
Returns
false if not in whitelist.

References comm_base_handle_slow_accept(), comm_point_raw_handle_callback(), comm_timer_callback(), tube_handle_signal(), and worker_win_stop_cb().

int fptr_whitelist_pending_udp ( comm_point_callback_t fptr)

Check function pointer whitelist for pending udp callback values.

Parameters
fptr,:function pointer to check.
Returns
false if not in whitelist.

References serviced_udp_callback(), and worker_handle_reply().

Referenced by outnet_send_wait_udp(), outnet_udp_cb(), and pending_udp_timer_cb().

int fptr_whitelist_pending_tcp ( comm_point_callback_t fptr)

Check function pointer whitelist for pending tcp callback values.

Parameters
fptr,:function pointer to check.
Returns
false if not in whitelist.

References serviced_tcp_callback(), and worker_handle_reply().

Referenced by outnet_tcp_cb(), outnet_tcptimer(), and use_free_buffer().

int fptr_whitelist_serviced_query ( comm_point_callback_t fptr)

Check function pointer whitelist for serviced query callback values.

Parameters
fptr,:function pointer to check.
Returns
false if not in whitelist.

References worker_handle_service_reply().

Referenced by serviced_callbacks().

int fptr_whitelist_rbtree_cmp ( int(*)(const void *, const void *)  fptr)

Check function pointer whitelist for rbtree cmp callback values.

Parameters
fptr,:function pointer to check.
Returns
false if not in whitelist.

References addr_tree_compare(), anchor_cmp(), canonical_tree_compare(), fwd_cmp(), local_data_cmp(), local_zone_cmp(), mesh_state_compare(), mesh_state_ref_compare(), mini_ev_cmp(), name_tree_compare(), nsec3_hash_cmp(), pending_cmp(), probetree_cmp(), serviced_cmp(), val_neg_data_compare(), and val_neg_zone_compare().

Referenced by rbtree_find_less_equal(), and rbtree_insert().

int fptr_whitelist_hash_sizefunc ( lruhash_sizefunc_t  fptr)

Check function pointer whitelist for lruhash sizefunc callback values.

Parameters
fptr,:function pointer to check.
Returns
false if not in whitelist.

References infra_sizefunc(), key_entry_sizefunc(), msgreply_sizefunc(), test_slabhash_sizefunc(), and ub_rrset_sizefunc().

Referenced by lruhash_insert(), and lruhash_remove().

int fptr_whitelist_hash_compfunc ( lruhash_compfunc_t  fptr)

Check function pointer whitelist for lruhash compfunc callback values.

Parameters
fptr,:function pointer to check.
Returns
false if not in whitelist.

References infra_compfunc(), key_entry_compfunc(), query_info_compare(), test_slabhash_compfunc(), and ub_rrset_compare().

Referenced by lruhash_insert(), lruhash_lookup(), and lruhash_remove().

int fptr_whitelist_hash_delkeyfunc ( lruhash_delkeyfunc_t  fptr)

Check function pointer whitelist for lruhash delkeyfunc callback values.

Parameters
fptr,:function pointer to check.
Returns
false if not in whitelist.

References infra_delkeyfunc(), key_entry_delkeyfunc(), query_entry_delete(), test_slabhash_delkey(), and ub_rrset_key_delete().

Referenced by lruhash_clear(), lruhash_insert(), and lruhash_remove().

int fptr_whitelist_hash_deldatafunc ( lruhash_deldatafunc_t  fptr)

Check function pointer whitelist for lruhash deldata callback values.

Parameters
fptr,:function pointer to check.
Returns
false if not in whitelist.

References infra_deldatafunc(), key_entry_deldatafunc(), reply_info_delete(), rrset_data_delete(), and test_slabhash_deldata().

Referenced by lruhash_clear(), lruhash_insert(), and lruhash_remove().

int fptr_whitelist_hash_markdelfunc ( lruhash_markdelfunc_t  fptr)

Check function pointer whitelist for lruhash markdel callback values.

Parameters
fptr,:function pointer to check.
Returns
false if not in whitelist.

References rrset_markdel().

Referenced by lruhash_clear(), lruhash_insert(), and lruhash_remove().

int fptr_whitelist_modenv_send_query ( struct outbound_entry *(*)(uint8_t *qname, size_t qnamelen, uint16_t qtype, uint16_t qclass, uint16_t flags, int dnssec, int want_dnssec, struct sockaddr_storage *addr, socklen_t addrlen, uint8_t *zone, size_t zonelen, struct module_qstate *q)  fptr)

Check function pointer whitelist for module_env send_query callback values.

Parameters
fptr,:function pointer to check.
Returns
false if not in whitelist.
int fptr_whitelist_modenv_detach_subs ( void(*)(struct module_qstate *qstate)  fptr)

Check function pointer whitelist for module_env detach_subs callback values.

Parameters
fptr,:function pointer to check.
Returns
false if not in whitelist.

References mesh_detach_subs().

Referenced by processInitRequest3(), and processQueryResponse().

int fptr_whitelist_modenv_attach_sub ( int(*)(struct module_qstate *qstate, struct query_info *qinfo, uint16_t qflags, int prime, struct module_qstate **newq)  fptr)

Check function pointer whitelist for module_env attach_sub callback values.

Parameters
fptr,:function pointer to check.
Returns
false if not in whitelist.

References mesh_attach_sub().

Referenced by generate_request(), and generate_sub_request().

int fptr_whitelist_modenv_kill_sub ( void(*)(struct module_qstate *newq)  fptr)

Check function pointer whitelist for module_env kill_sub callback values.

Parameters
fptr,:function pointer to check.
Returns
false if not in whitelist.

References mesh_state_delete().

Referenced by generate_ns_check(), generate_sub_request(), prime_root(), and prime_stub().

int fptr_whitelist_modenv_detect_cycle ( int(*)(struct module_qstate *qstate, struct query_info *qinfo, uint16_t flags, int prime)  fptr)

Check function pointer whitelist for module_env detect_cycle callback values.

Parameters
fptr,:function pointer to check.
Returns
false if not in whitelist.

References mesh_detect_cycle().

Referenced by causes_cycle().

int fptr_whitelist_mod_init ( int(*)(struct module_env *env, int id)  fptr)

Check function pointer whitelist for module init call values.

Parameters
fptr,:function pointer to check.
Returns
false if not in whitelist.

References iter_init(), pythonmod_init(), and val_init().

Referenced by modstack_setup().

int fptr_whitelist_mod_deinit ( void(*)(struct module_env *env, int id)  fptr)

Check function pointer whitelist for module deinit call values.

Parameters
fptr,:function pointer to check.
Returns
false if not in whitelist.

References iter_deinit(), pythonmod_deinit(), and val_deinit().

Referenced by modstack_desetup().

int fptr_whitelist_mod_operate ( void(*)(struct module_qstate *qstate, enum module_ev event, int id, struct outbound_entry *outbound)  fptr)

Check function pointer whitelist for module operate call values.

Parameters
fptr,:function pointer to check.
Returns
false if not in whitelist.

References iter_operate(), pythonmod_operate(), and val_operate().

Referenced by mesh_run().

int fptr_whitelist_mod_inform_super ( void(*)(struct module_qstate *qstate, int id, struct module_qstate *super)  fptr)

Check function pointer whitelist for module inform_super call values.

Parameters
fptr,:function pointer to check.
Returns
false if not in whitelist.

References iter_inform_super(), pythonmod_inform_super(), and val_inform_super().

Referenced by mesh_walk_supers().

int fptr_whitelist_mod_clear ( void(*)(struct module_qstate *qstate, int id)  fptr)

Check function pointer whitelist for module clear call values.

Parameters
fptr,:function pointer to check.
Returns
false if not in whitelist.

References iter_clear(), pythonmod_clear(), and val_clear().

Referenced by mesh_continue(), and mesh_state_cleanup().

int fptr_whitelist_mod_get_mem ( size_t(*)(struct module_env *env, int id)  fptr)

Check function pointer whitelist for module get_mem call values.

Parameters
fptr,:function pointer to check.
Returns
false if not in whitelist.

References iter_get_mem(), pythonmod_get_mem(), and val_get_mem().

Referenced by print_mem(), and worker_mem_report().

int fptr_whitelist_alloc_cleanup ( void(*)(void *)  fptr)

Check function pointer whitelist for alloc clear on id overflow call values.

Parameters
fptr,:function pointer to check.
Returns
false if not in whitelist.

References worker_alloc_cleanup().

Referenced by alloc_get_id(), and outnet_udp_cb().

int fptr_whitelist_tube_listen ( tube_callback_t fptr)

Check function pointer whitelist for tube listen handler values.

Parameters
fptr,:function pointer to check.
Returns
false if not in whitelist.

References worker_handle_control_cmd().

int fptr_whitelist_mesh_cb ( mesh_cb_func_t  fptr)

Check function pointer whitelist for mesh state callback values.

Parameters
fptr,:function pointer to check.
Returns
false if not in whitelist.

References probe_answer_cb().

Referenced by mesh_do_callback(), mesh_state_add_cb(), and mesh_state_cleanup().

int fptr_whitelist_print_func ( void(*)(char *, void *)  fptr)

Check function pointer whitelist for config_get_option func values.

Parameters
fptr,:function pointer to check.
Returns
false if not in whitelist.

References config_collate_func(), config_print_func(), and remote_get_opt_ssl().

Referenced by config_get_option().

int order_lock_cmp ( const void *  e1,
const void *  e2 
)

Due to module breakage by fptr wlist, these test app declarations are presented here.

compare two order_ids from lock-verify test app

Parameters
e1,:first order_id
e2,:second order_id
Returns
compare code -1, 0, +1 (like memcmp).

References order_id::instance, and order_id::thr.

int codeline_cmp ( const void *  a,
const void *  b 
)

compare two codeline structs for rbtree from memstats test app

Parameters
a,:codeline
b,:codeline
Returns
compare code -1, 0, +1 (like memcmp).