mirror of
https://github.com/NLnetLabs/unbound.git
synced 2025-12-20 23:00:56 -05:00
Fixup event callback checks.
git-svn-id: file:///svn/unbound/trunk@671 be551aaa-1e26-0410-a405-d3ace91eadb9
This commit is contained in:
parent
aed61e4d8a
commit
a5ac86f410
3 changed files with 9 additions and 16 deletions
|
|
@ -2,6 +2,9 @@
|
||||||
- removed logfile open early. It did not have the proper permissions;
|
- 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
|
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.
|
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
|
5 October 2007: Wouter
|
||||||
- function pointer whitelist.
|
- function pointer whitelist.
|
||||||
|
|
|
||||||
|
|
@ -45,6 +45,7 @@
|
||||||
#ifdef USE_MINI_EVENT
|
#ifdef USE_MINI_EVENT
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include "util/mini_event.h"
|
#include "util/mini_event.h"
|
||||||
|
#include "util/fptr_wlist.h"
|
||||||
|
|
||||||
/** compare events in tree, based on timevalue, ptr for uniqueness */
|
/** compare events in tree, based on timevalue, ptr for uniqueness */
|
||||||
int mini_ev_cmp(const void* a, const void* b)
|
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 */
|
/* event times out, remove it */
|
||||||
(void)rbtree_delete(base->times, p);
|
(void)rbtree_delete(base->times, p);
|
||||||
p->ev_events &= ~EV_TIMEOUT;
|
p->ev_events &= ~EV_TIMEOUT;
|
||||||
|
log_assert(fptr_whitelist_event(p->ev_callback));
|
||||||
(*p->ev_callback)(p->ev_fd, EV_TIMEOUT, p->ev_arg);
|
(*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;
|
bits &= base->fds[i]->ev_events;
|
||||||
if(bits) {
|
if(bits) {
|
||||||
|
log_assert(fptr_whitelist_event(
|
||||||
|
base->fds[i]->ev_callback));
|
||||||
(*base->fds[i]->ev_callback)(base->fds[i]->ev_fd,
|
(*base->fds[i]->ev_callback)(base->fds[i]->ev_fd,
|
||||||
bits, base->fds[i]->ev_arg);
|
bits, base->fds[i]->ev_arg);
|
||||||
if(ret==0)
|
if(ret==0)
|
||||||
|
|
@ -238,6 +242,7 @@ void event_set(struct event* ev, int fd, short bits,
|
||||||
ev->ev_fd = fd;
|
ev->ev_fd = fd;
|
||||||
ev->ev_events = bits;
|
ev->ev_events = bits;
|
||||||
ev->ev_callback = cb;
|
ev->ev_callback = cb;
|
||||||
|
log_assert(fptr_whitelist_event(ev->ev_callback));
|
||||||
ev->ev_arg = arg;
|
ev->ev_arg = arg;
|
||||||
ev->added = 0;
|
ev->added = 0;
|
||||||
}
|
}
|
||||||
|
|
@ -311,6 +316,7 @@ static RETSIGTYPE sigh(int sig)
|
||||||
ev = signal_base->signals[sig];
|
ev = signal_base->signals[sig];
|
||||||
if(!ev)
|
if(!ev)
|
||||||
return;
|
return;
|
||||||
|
log_assert(fptr_whitelist_event(ev->ev_callback));
|
||||||
(*ev->ev_callback)(sig, EV_SIGNAL, ev->ev_arg);
|
(*ev->ev_callback)(sig, EV_SIGNAL, ev->ev_arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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,
|
(void)comm_point_send_udp_msg(rep.c, rep.c->buffer,
|
||||||
(struct sockaddr*)&rep.addr, rep.addrlen);
|
(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 */
|
/** 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. */
|
/* addr is dropped. Not needed for tcp reply. */
|
||||||
setup_tcp_handler(c_hdl, new_fd);
|
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 */
|
/** 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);
|
NETEVENT_CLOSED, NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* may be deleted
|
|
||||||
log_assert(fptr_whitelist_event(c->ev->ev.ev_callback)); */
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(event&EV_WRITE) {
|
if(event&EV_WRITE) {
|
||||||
|
|
@ -482,8 +476,6 @@ comm_point_tcp_handle_callback(int fd, short event, void* arg)
|
||||||
NETEVENT_CLOSED, NULL);
|
NETEVENT_CLOSED, NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
log_assert(fptr_whitelist_event(c->ev->ev.ev_callback)); */
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(event&EV_TIMEOUT) {
|
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,
|
(void)(*c->callback)(c, c->cb_arg,
|
||||||
NETEVENT_TIMEOUT, NULL);
|
NETEVENT_TIMEOUT, NULL);
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
log_assert(fptr_whitelist_event(c->ev->ev.ev_callback)); */
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
log_err("Ignored event %d for tcphdl.", event);
|
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)
|
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,
|
(void)(*c->callback)(c, c->cb_arg, NETEVENT_CLOSED,
|
||||||
NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
/* log_assert(fptr_whitelist_event(c->ev->ev.ev_callback));*/
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
log_err("Ignored event %d for localhdl.", event);
|
log_err("Ignored event %d for localhdl.", event);
|
||||||
/*log_assert(fptr_whitelist_event(c->ev->ev.ev_callback));*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct comm_point*
|
struct comm_point*
|
||||||
|
|
@ -1044,7 +1030,6 @@ comm_timer_callback(int ATTR_UNUSED(fd), short event, void* arg)
|
||||||
tm->ev_timer->enabled = 0;
|
tm->ev_timer->enabled = 0;
|
||||||
log_assert(fptr_whitelist_comm_timer(tm->callback));
|
log_assert(fptr_whitelist_comm_timer(tm->callback));
|
||||||
(*tm->callback)(tm->cb_arg);
|
(*tm->callback)(tm->cb_arg);
|
||||||
/* it was deleted log_assert(fptr_whitelist_event(tm->ev_timer->ev.ev_callback)); */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
@ -1084,7 +1069,6 @@ comm_signal_callback(int sig, short event, void* arg)
|
||||||
return;
|
return;
|
||||||
log_assert(fptr_whitelist_comm_signal(comsig->callback));
|
log_assert(fptr_whitelist_comm_signal(comsig->callback));
|
||||||
(*comsig->callback)(sig, comsig->cb_arg);
|
(*comsig->callback)(sig, comsig->cb_arg);
|
||||||
/*log_assert(fptr_whitelist_event(comsig->ev_signal->ev.ev_callback));*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue