Fixup event callback checks.

git-svn-id: file:///svn/unbound/trunk@671 be551aaa-1e26-0410-a405-d3ace91eadb9
This commit is contained in:
Wouter Wijngaards 2007-10-09 12:04:13 +00:00
parent aed61e4d8a
commit a5ac86f410
3 changed files with 9 additions and 16 deletions

View file

@ -2,6 +2,9 @@
- removed logfile open early. It did not have the proper permissions;
it was opened as root instead of the user. And we cannot change user
id yet, since chroot and bind ports need to be done.
- callback checks for event callbacks done from mini_event. Because
of deletions cannot do this from netevent. This means when using
libevent the protection does not work on event-callbacks.
5 October 2007: Wouter
- function pointer whitelist.

View file

@ -45,6 +45,7 @@
#ifdef USE_MINI_EVENT
#include <signal.h>
#include "util/mini_event.h"
#include "util/fptr_wlist.h"
/** compare events in tree, based on timevalue, ptr for uniqueness */
int mini_ev_cmp(const void* a, const void* b)
@ -145,6 +146,7 @@ static void handle_timeouts(struct event_base* base, struct timeval* now,
/* event times out, remove it */
(void)rbtree_delete(base->times, p);
p->ev_events &= ~EV_TIMEOUT;
log_assert(fptr_whitelist_event(p->ev_callback));
(*p->ev_callback)(p->ev_fd, EV_TIMEOUT, p->ev_arg);
}
}
@ -181,6 +183,8 @@ static int handle_select(struct event_base* base, struct timeval* wait)
}
bits &= base->fds[i]->ev_events;
if(bits) {
log_assert(fptr_whitelist_event(
base->fds[i]->ev_callback));
(*base->fds[i]->ev_callback)(base->fds[i]->ev_fd,
bits, base->fds[i]->ev_arg);
if(ret==0)
@ -238,6 +242,7 @@ void event_set(struct event* ev, int fd, short bits,
ev->ev_fd = fd;
ev->ev_events = bits;
ev->ev_callback = cb;
log_assert(fptr_whitelist_event(ev->ev_callback));
ev->ev_arg = arg;
ev->added = 0;
}
@ -311,6 +316,7 @@ static RETSIGTYPE sigh(int sig)
ev = signal_base->signals[sig];
if(!ev)
return;
log_assert(fptr_whitelist_event(ev->ev_callback));
(*ev->ev_callback)(sig, EV_SIGNAL, ev->ev_arg);
}

View file

@ -206,8 +206,6 @@ comm_point_udp_callback(int fd, short event, void* arg)
(void)comm_point_send_udp_msg(rep.c, rep.c->buffer,
(struct sockaddr*)&rep.addr, rep.addrlen);
}
/* may be deleted
log_assert(fptr_whitelist_event(rep.c->ev->ev.ev_callback)); */
}
/** Use a new tcp handler for new query fd, set to read query */
@ -264,8 +262,6 @@ comm_point_tcp_accept_callback(int fd, short event, void* arg)
}
/* addr is dropped. Not needed for tcp reply. */
setup_tcp_handler(c_hdl, new_fd);
/* may be deleted
log_assert(fptr_whitelist_event(c->ev->ev.ev_callback)); */
}
/** Make tcp handler free for next assignment */
@ -468,8 +464,6 @@ comm_point_tcp_handle_callback(int fd, short event, void* arg)
NETEVENT_CLOSED, NULL);
}
}
/* may be deleted
log_assert(fptr_whitelist_event(c->ev->ev.ev_callback)); */
return;
}
if(event&EV_WRITE) {
@ -482,8 +476,6 @@ comm_point_tcp_handle_callback(int fd, short event, void* arg)
NETEVENT_CLOSED, NULL);
}
}
/*
log_assert(fptr_whitelist_event(c->ev->ev.ev_callback)); */
return;
}
if(event&EV_TIMEOUT) {
@ -494,13 +486,9 @@ comm_point_tcp_handle_callback(int fd, short event, void* arg)
(void)(*c->callback)(c, c->cb_arg,
NETEVENT_TIMEOUT, NULL);
}
/*
log_assert(fptr_whitelist_event(c->ev->ev.ev_callback)); */
return;
}
log_err("Ignored event %d for tcphdl.", event);
/*
log_assert(fptr_whitelist_event(c->ev->ev.ev_callback)); */
}
void comm_point_local_handle_callback(int fd, short event, void* arg)
@ -514,11 +502,9 @@ void comm_point_local_handle_callback(int fd, short event, void* arg)
(void)(*c->callback)(c, c->cb_arg, NETEVENT_CLOSED,
NULL);
}
/* log_assert(fptr_whitelist_event(c->ev->ev.ev_callback));*/
return;
}
log_err("Ignored event %d for localhdl.", event);
/*log_assert(fptr_whitelist_event(c->ev->ev.ev_callback));*/
}
struct comm_point*
@ -1044,7 +1030,6 @@ comm_timer_callback(int ATTR_UNUSED(fd), short event, void* arg)
tm->ev_timer->enabled = 0;
log_assert(fptr_whitelist_comm_timer(tm->callback));
(*tm->callback)(tm->cb_arg);
/* it was deleted log_assert(fptr_whitelist_event(tm->ev_timer->ev.ev_callback)); */
}
int
@ -1084,7 +1069,6 @@ comm_signal_callback(int sig, short event, void* arg)
return;
log_assert(fptr_whitelist_comm_signal(comsig->callback));
(*comsig->callback)(sig, comsig->cb_arg);
/*log_assert(fptr_whitelist_event(comsig->ev_signal->ev.ev_callback));*/
}
int