]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
Fixup event callback checks.
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Tue, 9 Oct 2007 12:04:13 +0000 (12:04 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Tue, 9 Oct 2007 12:04:13 +0000 (12:04 +0000)
git-svn-id: file:///svn/unbound/trunk@671 be551aaa-1e26-0410-a405-d3ace91eadb9

doc/Changelog
util/mini_event.c
util/netevent.c

index 8f87fd89523267e08acfb10f9979a8f387e9081c..9bd8ddf38763a49aba8d5b950efae824324e8540 100644 (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.
index 3b91e14c86b1049a19824e54bc1ecb55d08aff5b..36b995a52c5dad5756bc941893ff9caf4defe415 100644 (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);
 }
 
index 404dc6111dc560b7b9a283d351c7f8a985dbc66b..df3882760f2b96237f3579d57f475ea87812d097 100644 (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