#include "util/netevent.h"
#include "util/storage/lruhash.h"
#include "util/module.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_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_packet (int(*fptr)(ldns_buffer *pkt, struct sockaddr_storage *addr, socklen_t addrlen, int timeout, struct module_qstate *q, int use_tcp)) |
Check function pointer whitelist for module_env send_packet 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, 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 | 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 |
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 | ) |
Value:
do { if(!(x)) \ fatal_exit("%s:%d: %s: pointer whitelist %s failed", \ __FILE__, __LINE__, __func__, #x); \ } while(0);
Does not get disabled in optimize mode. Check adds security by layers.
Referenced by causes_cycle(), comm_point_local_handle_callback(), comm_point_tcp_handle_callback(), comm_point_udp_ancil_callback(), comm_point_udp_callback(), comm_signal_callback(), comm_timer_callback(), generate_request(), generate_sub_request(), lruhash_clear(), lruhash_insert(), lruhash_lookup(), lruhash_remove(), 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_stub(), processQueryResponse(), processQueryTargets(), rbtree_find_less_equal(), rbtree_insert(), serviced_callbacks(), tcp_callback_reader(), 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(), worker_handle_control_cmd(), 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_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(), and worker_stat_timer_cb().
Referenced by comm_timer_callback().
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(), and comm_timer_callback().
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 acl_list_cmp(), anchor_cmp(), canonical_tree_compare(), codeline_cmp(), context_query_cmp(), donotq_cmp(), fwd_cmp(), local_data_cmp(), local_zone_cmp(), mesh_state_compare(), mesh_state_ref_compare(), mini_ev_cmp(), nsec3_hash_cmp(), order_lock_cmp(), pending_cmp(), serviced_cmp(), and stub_cmp().
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_packet | ( | int(*)(ldns_buffer *pkt, struct sockaddr_storage *addr, socklen_t addrlen, int timeout, struct module_qstate *q, int use_tcp) | fptr | ) |
Check function pointer whitelist for module_env send_packet callback values.
fptr,: | function pointer to check. |
References libworker_send_packet(), and worker_send_packet().
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, 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. |
References libworker_send_query(), and worker_send_query().
Referenced by processQueryTargets().
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 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_sub_request(), 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(), 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(), 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(), 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(), 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(), and val_clear().
Referenced by 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(), and val_get_mem().
Referenced by 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().
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
References log_assert.
Referenced by fptr_whitelist_rbtree_cmp(), and main().