unbound 0.1
|
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"
Defines | |
#define | fptr_ok(x) |
Macro to perform an assertion check for fptr wlist checks. | |
Functions | |
int | fptr_whitelist_comm_point (comm_point_callback_t *fptr) |
Check function pointer whitelist for comm_point callback values. | |
int | fptr_whitelist_comm_point_raw (comm_point_callback_t *fptr) |
Check function pointer whitelist for raw comm_point callback values. | |
int | fptr_whitelist_comm_timer (void(*fptr)(void *)) |
Check function pointer whitelist for comm_timer callback values. | |
int | fptr_whitelist_comm_signal (void(*fptr)(int, void *)) |
Check function pointer whitelist for comm_signal callback values. | |
int | fptr_whitelist_event (void(*fptr)(int, short, void *)) |
Check function pointer whitelist for event structure callback values. | |
int | fptr_whitelist_pending_udp (comm_point_callback_t *fptr) |
Check function pointer whitelist for pending udp callback values. | |
int | fptr_whitelist_pending_tcp (comm_point_callback_t *fptr) |
Check function pointer whitelist for pending tcp callback values. | |
int | fptr_whitelist_serviced_query (comm_point_callback_t *fptr) |
Check function pointer whitelist for serviced query callback values. | |
int | fptr_whitelist_rbtree_cmp (int(*fptr)(const void *, const void *)) |
Check function pointer whitelist for rbtree cmp callback values. | |
int | fptr_whitelist_hash_sizefunc (lruhash_sizefunc_t fptr) |
Check function pointer whitelist for lruhash sizefunc callback values. | |
int | fptr_whitelist_hash_compfunc (lruhash_compfunc_t fptr) |
Check function pointer whitelist for lruhash compfunc callback values. | |
int | fptr_whitelist_hash_delkeyfunc (lruhash_delkeyfunc_t fptr) |
Check function pointer whitelist for lruhash delkeyfunc callback values. | |
int | fptr_whitelist_hash_deldatafunc (lruhash_deldatafunc_t fptr) |
Check function pointer whitelist for lruhash deldata callback values. | |
int | fptr_whitelist_hash_markdelfunc (lruhash_markdelfunc_t fptr) |
Check function pointer whitelist for lruhash markdel callback values. | |
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, struct module_qstate *q)) |
Check function pointer whitelist for module_env send_query callback values. | |
int | fptr_whitelist_modenv_detach_subs (void(*fptr)(struct module_qstate *qstate)) |
Check function pointer whitelist for module_env detach_subs callback values. | |
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. | |
int | fptr_whitelist_modenv_kill_sub (void(*fptr)(struct module_qstate *newq)) |
Check function pointer whitelist for module_env kill_sub callback values. | |
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. | |
int | fptr_whitelist_mod_init (int(*fptr)(struct module_env *env, int id)) |
Check function pointer whitelist for module init call values. | |
int | fptr_whitelist_mod_deinit (void(*fptr)(struct module_env *env, int id)) |
Check function pointer whitelist for module deinit call values. | |
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. | |
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. | |
int | fptr_whitelist_mod_clear (void(*fptr)(struct module_qstate *qstate, int id)) |
Check function pointer whitelist for module clear call values. | |
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. | |
int | fptr_whitelist_alloc_cleanup (void(*fptr)(void *)) |
Check function pointer whitelist for alloc clear on id overflow call values. | |
int | fptr_whitelist_tube_listen (tube_callback_t *fptr) |
Check function pointer whitelist for tube listen handler values. | |
int | fptr_whitelist_mesh_cb (mesh_cb_func_t fptr) |
Check function pointer whitelist for mesh state callback values. | |
int | fptr_whitelist_print_func (void(*fptr)(char *, void *)) |
Check function pointer whitelist for config_get_option func values. | |
int | order_lock_cmp (const void *e1, const void *e2) |
Due to module breakage by fptr wlist, these test app declarations are presented here. | |
int | codeline_cmp (const void *a, const void *b) |
compare two codeline structs for rbtree from memstats test app | |
int | replay_var_compare (const void *a, const void *b) |
compare two replay_vars |
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.
#define fptr_ok | ( | x | ) |
do { if(!(x)) \ fatal_exit("%s:%d: %s: pointer whitelist %s failed", \ __FILE__, __LINE__, __func__, #x); \ } while(0);
Macro to perform an assertion check for fptr wlist checks.
Does not get disabled in optimize mode. Check adds security by layers.
Referenced by alloc_get_id(), causes_cycle(), comm_point_local_handle_callback(), comm_point_raw_handle_callback(), comm_point_tcp_handle_callback(), comm_point_udp_ancil_callback(), comm_point_udp_callback(), comm_signal_callback(), comm_timer_callback(), comm_timer_create(), config_get_option(), generate_ns_check(), generate_request(), generate_sub_request(), lruhash_clear(), lruhash_insert(), lruhash_lookup(), lruhash_remove(), mesh_continue(), mesh_do_callback(), mesh_run(), mesh_state_cleanup(), mesh_walk_supers(), modstack_desetup(), modstack_setup(), outnet_send_wait_udp(), outnet_tcp_cb(), outnet_tcptimer(), outnet_udp_cb(), pending_udp_timer_cb(), prime_root(), prime_stub(), print_mem(), processInitRequest3(), processQueryResponse(), processQueryTargets(), rbtree_find_less_equal(), rbtree_insert(), serviced_callbacks(), tcp_callback_reader(), time_passes(), tube_handle_listen(), use_free_buffer(), and worker_mem_report().
int fptr_whitelist_comm_point | ( | comm_point_callback_t * | fptr | ) |
Check function pointer whitelist for comm_point callback values.
fptr,: | function pointer to check. |
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.
fptr,: | function pointer to check. |
References remote_accept_callback(), remote_control_callback(), tube_handle_listen(), and tube_handle_write().
Referenced by comm_point_raw_handle_callback().
int fptr_whitelist_comm_timer | ( | void(*)(void *) | fptr | ) |
Check function pointer whitelist for comm_timer callback values.
fptr,: | function pointer to check. |
References outnet_tcptimer(), pending_udp_timer_cb(), worker_probe_timer_cb(), worker_stat_timer_cb(), and wsvc_cron_cb().
Referenced by comm_timer_callback(), comm_timer_create(), and time_passes().
int fptr_whitelist_comm_signal | ( | void(*)(int, void *) | fptr | ) |
Check function pointer whitelist for comm_signal callback values.
fptr,: | function pointer to check. |
References worker_sighandler().
Referenced by comm_signal_callback().
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.
fptr,: | function pointer to check. |
References comm_point_local_handle_callback(), comm_point_raw_handle_callback(), comm_point_tcp_accept_callback(), comm_point_tcp_handle_callback(), comm_point_udp_ancil_callback(), comm_point_udp_callback(), comm_signal_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.
fptr,: | function pointer to check. |
References libworker_handle_reply(), 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.
fptr,: | function pointer to check. |
References libworker_handle_reply(), 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.
fptr,: | function pointer to check. |
References libworker_handle_service_reply(), and 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.
fptr,: | function pointer to check. |
References addr_tree_compare(), anchor_cmp(), canonical_tree_compare(), codeline_cmp(), context_query_cmp(), fwd_cmp(), local_data_cmp(), local_zone_cmp(), mesh_state_compare(), mesh_state_ref_compare(), mini_ev_cmp(), name_tree_compare(), nsec3_hash_cmp(), order_lock_cmp(), pending_cmp(), probetree_cmp(), replay_var_compare(), 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.
fptr,: | function pointer to check. |
References infra_host_sizefunc(), infra_lame_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.
fptr,: | function pointer to check. |
References infra_host_compfunc(), infra_lame_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.
fptr,: | function pointer to check. |
References infra_host_delkeyfunc(), infra_lame_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.
fptr,: | function pointer to check. |
References infra_host_deldatafunc(), infra_lame_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.
fptr,: | function pointer to check. |
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, struct module_qstate *q) | fptr | ) |
Check function pointer whitelist for module_env send_query callback values.
fptr,: | function pointer to check. |
int fptr_whitelist_modenv_detach_subs | ( | void(*)(struct module_qstate *qstate) | fptr | ) |
Check function pointer whitelist for module_env detach_subs callback values.
fptr,: | function pointer to check. |
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.
fptr,: | function pointer to check. |
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.
fptr,: | function pointer to check. |
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.
fptr,: | function pointer to check. |
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.
fptr,: | function pointer to check. |
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.
fptr,: | function pointer to check. |
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.
fptr,: | function pointer to check. |
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.
fptr,: | function pointer to check. |
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.
fptr,: | function pointer to check. |
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.
fptr,: | function pointer to check. |
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.
fptr,: | function pointer to check. |
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.
fptr,: | function pointer to check. |
References libworker_handle_control_cmd(), and worker_handle_control_cmd().
Referenced by tube_handle_listen().
int fptr_whitelist_mesh_cb | ( | mesh_cb_func_t | fptr | ) |
Check function pointer whitelist for mesh state callback values.
fptr,: | function pointer to check. |
References libworker_bg_done_cb(), libworker_fg_done_cb(), and 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.
fptr,: | function pointer to check. |
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
References order_id::instance, log_assert, and order_id::thr.
Referenced by fptr_whitelist_rbtree_cmp(), insert_lock(), main(), and read_create().
int codeline_cmp | ( | const void * | a, |
const void * | b | ||
) |
compare two codeline structs for rbtree from memstats test app
a,: | codeline |
b,: | codeline |
References log_assert.
Referenced by fptr_whitelist_rbtree_cmp(), and main().