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;
|
||||
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.
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in a new issue