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_type *fptr)
 Check function pointer whitelist for comm_point callback values. More...
 
int fptr_whitelist_comm_point_raw (comm_point_callback_type *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_type *fptr)
 Check function pointer whitelist for pending udp callback values. More...
 
int fptr_whitelist_pending_tcp (comm_point_callback_type *fptr)
 Check function pointer whitelist for pending tcp callback values. More...
 
int fptr_whitelist_serviced_query (comm_point_callback_type *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_type fptr)
 Check function pointer whitelist for lruhash sizefunc callback values. More...
 
int fptr_whitelist_hash_compfunc (lruhash_compfunc_type fptr)
 Check function pointer whitelist for lruhash compfunc callback values. More...
 
int fptr_whitelist_hash_delkeyfunc (lruhash_delkeyfunc_type fptr)
 Check function pointer whitelist for lruhash delkeyfunc callback values. More...
 
int fptr_whitelist_hash_deldatafunc (lruhash_deldatafunc_type fptr)
 Check function pointer whitelist for lruhash deldata callback values. More...
 
int fptr_whitelist_hash_markdelfunc (lruhash_markdelfunc_type fptr)
 Check function pointer whitelist for lruhash markdel callback values. More...
 
int fptr_whitelist_modenv_send_query (struct outbound_entry *(*fptr)(struct query_info *qinfo, uint16_t flags, int dnssec, int want_dnssec, int nocaps, int check_ratelimit, struct sockaddr_storage *addr, socklen_t addrlen, uint8_t *zone, size_t zonelen, int tcp_upstream, int ssl_upstream, char *tls_auth_name, struct module_qstate *q, int *was_ratelimited))
 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, int valrec, struct module_qstate **newq))
 Check function pointer whitelist for module_env attach_sub callback values. More...
 
int fptr_whitelist_modenv_add_sub (int(*fptr)(struct module_qstate *qstate, struct query_info *qinfo, uint16_t qflags, int prime, int valrec, struct module_qstate **newq, struct mesh_state **sub))
 Check function pointer whitelist for module_env add_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, int valrec))
 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_startup (int(*fptr)(struct module_env *env, int id))
 Check function pointer whitelist for module startup call values. More...
 
int fptr_whitelist_mod_destartup (void(*fptr)(struct module_env *env, int id))
 Check function pointer whitelist for module destartup 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_type *fptr)
 Check function pointer whitelist for tube listen handler values. More...
 
int fptr_whitelist_mesh_cb (mesh_cb_func_type 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 fptr_whitelist_inplace_cb_reply_generic (inplace_cb_reply_func_type *fptr, enum inplace_cb_list_type type)
 Check function pointer whitelist for inplace_cb_reply, inplace_cb_reply_cache, inplace_cb_reply_local and inplace_cb_reply_servfail func values. More...
 
int fptr_whitelist_inplace_cb_query (inplace_cb_query_func_type *fptr)
 Check function pointer whitelist for inplace_cb_query func values. More...
 
int fptr_whitelist_inplace_cb_edns_back_parsed (inplace_cb_edns_back_parsed_func_type *fptr)
 Check function pointer whitelist for inplace_cb_edns_back_parsed func values. More...
 
int fptr_whitelist_inplace_cb_query_response (inplace_cb_query_response_func_type *fptr)
 Check function pointer whitelist for inplace_cb_query_response func values. More...
 
int fptr_whitelist_serve_expired_lookup (serve_expired_lookup_func_type *fptr)
 Check function pointer whitelist for serve_expired_lookup 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

◆ fptr_ok

#define fptr_ok (   x)
Value:
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.

Function Documentation

◆ fptr_whitelist_comm_point()

◆ fptr_whitelist_comm_point_raw()

int fptr_whitelist_comm_point_raw ( comm_point_callback_type fptr)

Check function pointer whitelist for raw comm_point callback values.

Parameters
fptrfunction pointer to check.
Returns
false if not in whitelist.

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

◆ fptr_whitelist_comm_timer()

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

◆ fptr_whitelist_comm_signal()

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

Check function pointer whitelist for comm_signal callback values.

Parameters
fptrfunction pointer to check.
Returns
false if not in whitelist.

References worker_sighandler().

Referenced by comm_signal_callback().

◆ fptr_whitelist_start_accept()

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

Check function pointer whitelist for start_accept callback values.

Parameters
fptrfunction pointer to check.
Returns
false if not in whitelist.

References worker_start_accept().

◆ fptr_whitelist_stop_accept()

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

Check function pointer whitelist for stop_accept callback values.

Parameters
fptrfunction pointer to check.
Returns
false if not in whitelist.

References worker_stop_accept().

Referenced by comm_point_perform_accept().

◆ fptr_whitelist_event()

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
fptrfunction pointer to check.
Returns
false if not in whitelist.

◆ fptr_whitelist_pending_udp()

int fptr_whitelist_pending_udp ( comm_point_callback_type fptr)

Check function pointer whitelist for pending udp callback values.

Parameters
fptrfunction pointer to check.
Returns
false if not in whitelist.

References serviced_udp_callback().

Referenced by outnet_send_wait_udp(), and pending_udp_timer_cb().

◆ fptr_whitelist_pending_tcp()

int fptr_whitelist_pending_tcp ( comm_point_callback_type fptr)

Check function pointer whitelist for pending tcp callback values.

Parameters
fptrfunction pointer to check.
Returns
false if not in whitelist.

References serviced_tcp_callback().

Referenced by waiting_tcp_callback().

◆ fptr_whitelist_serviced_query()

int fptr_whitelist_serviced_query ( comm_point_callback_type fptr)

Check function pointer whitelist for serviced query callback values.

Parameters
fptrfunction pointer to check.
Returns
false if not in whitelist.

References worker_handle_service_reply().

◆ fptr_whitelist_rbtree_cmp()

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

Check function pointer whitelist for rbtree cmp callback values.

Parameters
fptrfunction pointer to check.
Returns
false if not in whitelist.

References addr_tree_addrport_compare(), addr_tree_compare(), fwd_cmp(), local_data_cmp(), local_zone_cmp(), mesh_state_compare(), mesh_state_ref_compare(), name_tree_compare(), pending_cmp(), reuse_cmp(), reuse_id_cmp(), and serviced_cmp().

Referenced by rbtree_find_less_equal(), and rbtree_insert().

◆ fptr_whitelist_hash_sizefunc()

int fptr_whitelist_hash_sizefunc ( lruhash_sizefunc_type  fptr)

Check function pointer whitelist for lruhash sizefunc callback values.

Parameters
fptrfunction pointer to check.
Returns
false if not in whitelist.

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

Referenced by lruhash_insert(), lruhash_insert_or_retrieve(), lruhash_remove(), and lruhash_update_space_used().

◆ fptr_whitelist_hash_compfunc()

int fptr_whitelist_hash_compfunc ( lruhash_compfunc_type  fptr)

Check function pointer whitelist for lruhash compfunc callback values.

Parameters
fptrfunction pointer to check.
Returns
false if not in whitelist.

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

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

◆ fptr_whitelist_hash_delkeyfunc()

int fptr_whitelist_hash_delkeyfunc ( lruhash_delkeyfunc_type  fptr)

Check function pointer whitelist for lruhash delkeyfunc callback values.

Parameters
fptrfunction pointer to check.
Returns
false if not in whitelist.

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

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

◆ fptr_whitelist_hash_deldatafunc()

int fptr_whitelist_hash_deldatafunc ( lruhash_deldatafunc_type  fptr)

Check function pointer whitelist for lruhash deldata callback values.

Parameters
fptrfunction pointer to check.
Returns
false if not in whitelist.

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

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

◆ fptr_whitelist_hash_markdelfunc()

int fptr_whitelist_hash_markdelfunc ( lruhash_markdelfunc_type  fptr)

Check function pointer whitelist for lruhash markdel callback values.

Parameters
fptrfunction pointer to check.
Returns
false if not in whitelist.

References rrset_markdel(), and subnet_markdel().

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

◆ fptr_whitelist_modenv_send_query()

int fptr_whitelist_modenv_send_query ( struct outbound_entry *(*)(struct query_info *qinfo, uint16_t flags, int dnssec, int want_dnssec, int nocaps, int check_ratelimit, struct sockaddr_storage *addr, socklen_t addrlen, uint8_t *zone, size_t zonelen, int tcp_upstream, int ssl_upstream, char *tls_auth_name, struct module_qstate *q, int *was_ratelimited)  fptr)

Check function pointer whitelist for module_env send_query callback values.

Parameters
fptrfunction pointer to check.
Returns
false if not in whitelist.

Check function pointer whitelist for module_env send_query callback values.

References worker_send_query().

◆ fptr_whitelist_modenv_detach_subs()

int fptr_whitelist_modenv_detach_subs ( void(*)(struct module_qstate *qstate)  fptr)

Check function pointer whitelist for module_env detach_subs callback values.

Parameters
fptrfunction pointer to check.
Returns
false if not in whitelist.

References mesh_detach_subs().

Referenced by processInitRequest3().

◆ fptr_whitelist_modenv_attach_sub()

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

Check function pointer whitelist for module_env attach_sub callback values.

Parameters
fptrfunction pointer to check.
Returns
false if not in whitelist.

References mesh_attach_sub().

Referenced by generate_request(), and generate_sub_request().

◆ fptr_whitelist_modenv_add_sub()

int fptr_whitelist_modenv_add_sub ( int(*)(struct module_qstate *qstate, struct query_info *qinfo, uint16_t qflags, int prime, int valrec, struct module_qstate **newq, struct mesh_state **sub)  fptr)

Check function pointer whitelist for module_env add_sub callback values.

Parameters
fptrfunction pointer to check.
Returns
false if not in whitelist.

References mesh_add_sub().

Referenced by generate_request(), and generate_sub_request().

◆ fptr_whitelist_modenv_kill_sub()

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

Check function pointer whitelist for module_env kill_sub callback values.

Parameters
fptrfunction pointer to check.
Returns
false if not in whitelist.

References mesh_state_delete().

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

◆ fptr_whitelist_modenv_detect_cycle()

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

Check function pointer whitelist for module_env detect_cycle callback values.

Parameters
fptrfunction pointer to check.
Returns
false if not in whitelist.

References mesh_detect_cycle().

Referenced by causes_cycle(), and generate_request().

◆ fptr_whitelist_mod_init()

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

Check function pointer whitelist for module init call values.

Parameters
fptrfunction pointer to check.
Returns
false if not in whitelist.

References cachedb_init(), dns64_init(), dynlibmod_init(), ipsecmod_init(), ipset_init(), iter_init(), pythonmod_init(), respip_init(), subnetmod_init(), and val_init().

Referenced by modstack_call_init().

◆ fptr_whitelist_mod_deinit()

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

Check function pointer whitelist for module deinit call values.

Parameters
fptrfunction pointer to check.
Returns
false if not in whitelist.

References cachedb_deinit(), dns64_deinit(), dynlibmod_deinit(), ipsecmod_deinit(), ipset_deinit(), iter_deinit(), pythonmod_deinit(), respip_deinit(), subnetmod_deinit(), and val_deinit().

Referenced by modstack_call_deinit().

◆ fptr_whitelist_mod_startup()

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

Check function pointer whitelist for module startup call values.

Parameters
fptrfunction pointer to check.
Returns
false if not in whitelist.

References ipset_startup().

◆ fptr_whitelist_mod_destartup()

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

Check function pointer whitelist for module destartup call values.

Parameters
fptrfunction pointer to check.
Returns
false if not in whitelist.

References ipset_destartup().

Referenced by modstack_call_destartup().

◆ fptr_whitelist_mod_operate()

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
fptrfunction pointer to check.
Returns
false if not in whitelist.

References cachedb_operate(), dns64_operate(), dynlibmod_operate(), ipsecmod_operate(), ipset_operate(), iter_operate(), pythonmod_operate(), respip_operate(), subnetmod_operate(), and val_operate().

Referenced by mesh_run().

◆ fptr_whitelist_mod_inform_super()

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
fptrfunction pointer to check.
Returns
false if not in whitelist.

References cachedb_inform_super(), dns64_inform_super(), dynlibmod_inform_super(), ipsecmod_inform_super(), ipset_inform_super(), iter_inform_super(), pythonmod_inform_super(), respip_inform_super(), subnetmod_inform_super(), and val_inform_super().

Referenced by mesh_walk_supers().

◆ fptr_whitelist_mod_clear()

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

Check function pointer whitelist for module clear call values.

Parameters
fptrfunction pointer to check.
Returns
false if not in whitelist.

References cachedb_clear(), dns64_clear(), dynlibmod_clear(), ipsecmod_clear(), ipset_clear(), iter_clear(), pythonmod_clear(), respip_clear(), subnetmod_clear(), and val_clear().

Referenced by mesh_continue().

◆ fptr_whitelist_mod_get_mem()

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
fptrfunction pointer to check.
Returns
false if not in whitelist.

References cachedb_get_mem(), dns64_get_mem(), dynlibmod_get_mem(), ipsecmod_get_mem(), ipset_get_mem(), iter_get_mem(), pythonmod_get_mem(), respip_get_mem(), subnetmod_get_mem(), and val_get_mem().

Referenced by mod_get_mem().

◆ fptr_whitelist_alloc_cleanup()

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

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

Parameters
fptrfunction pointer to check.
Returns
false if not in whitelist.

References worker_alloc_cleanup().

Referenced by alloc_get_id().

◆ fptr_whitelist_tube_listen()

int fptr_whitelist_tube_listen ( tube_callback_type fptr)

Check function pointer whitelist for tube listen handler values.

Parameters
fptrfunction pointer to check.
Returns
false if not in whitelist.

References worker_handle_control_cmd().

◆ fptr_whitelist_mesh_cb()

int fptr_whitelist_mesh_cb ( mesh_cb_func_type  fptr)

Check function pointer whitelist for mesh state callback values.

Parameters
fptrfunction pointer to check.
Returns
false if not in whitelist.

Referenced by mesh_state_add_cb().

◆ fptr_whitelist_print_func()

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

Check function pointer whitelist for config_get_option func values.

Parameters
fptrfunction 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().

◆ fptr_whitelist_inplace_cb_reply_generic()

int fptr_whitelist_inplace_cb_reply_generic ( inplace_cb_reply_func_type fptr,
enum inplace_cb_list_type  type 
)

Check function pointer whitelist for inplace_cb_reply, inplace_cb_reply_cache, inplace_cb_reply_local and inplace_cb_reply_servfail func values.

Parameters
fptrfunction pointer to check.
typethe type of the callback function.
Returns
false if not in whitelist.

◆ fptr_whitelist_inplace_cb_query()

int fptr_whitelist_inplace_cb_query ( inplace_cb_query_func_type fptr)

Check function pointer whitelist for inplace_cb_query func values.

Parameters
fptrfunction pointer to check.
Returns
false if not in whitelist.

References ecs_whitelist_check(), and python_inplace_cb_query_generic().

◆ fptr_whitelist_inplace_cb_edns_back_parsed()

int fptr_whitelist_inplace_cb_edns_back_parsed ( inplace_cb_edns_back_parsed_func_type fptr)

Check function pointer whitelist for inplace_cb_edns_back_parsed func values.

Parameters
fptrfunction pointer to check.
Returns
false if not in whitelist.

References ecs_edns_back_parsed(), and python_inplace_cb_edns_back_parsed_call().

◆ fptr_whitelist_inplace_cb_query_response()

int fptr_whitelist_inplace_cb_query_response ( inplace_cb_query_response_func_type fptr)

Check function pointer whitelist for inplace_cb_query_response func values.

Parameters
fptrfunction pointer to check.
Returns
false if not in whitelist.

References ecs_query_response(), and python_inplace_cb_query_response().

◆ fptr_whitelist_serve_expired_lookup()

int fptr_whitelist_serve_expired_lookup ( serve_expired_lookup_func_type fptr)

Check function pointer whitelist for serve_expired_lookup func values.

Parameters
fptrfunction pointer to check.
Returns
false if not in whitelist.

References mesh_serve_expired_lookup().

Referenced by mesh_serve_expired_callback().

◆ order_lock_cmp()

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
e1first order_id
e2second order_id
Returns
compare code -1, 0, +1 (like memcmp).

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

◆ codeline_cmp()

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

compare two codeline structs for rbtree from memstats test app

Parameters
acodeline
bcodeline
Returns
compare code -1, 0, +1 (like memcmp).