]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
ensure that FD/timer add is only called from modules
authorAlan T. DeKok <aland@freeradius.org>
Sat, 26 Nov 2016 21:35:14 +0000 (16:35 -0500)
committerAlan T. DeKok <aland@freeradius.org>
Sat, 26 Nov 2016 21:35:14 +0000 (16:35 -0500)
src/main/unlang.c

index f4d87dd198b638cc24b7a244f4d6b611aadbffb6..494cf7a29f5d094bcdb87c21b298a947d71b745d 100644 (file)
@@ -1359,8 +1359,16 @@ static void unlang_event_fd_handler(UNUSED fr_event_list_t *el, int fd, void *ct
 int unlang_event_timeout_add(REQUEST *request, fr_unlang_timeout_callback_t callback,
                             void const *inst, void const *ctx, struct timeval *when)
 {
+       unlang_stack_frame_t    *frame;
+       unlang_stack_t          *stack = request->stack;
        unlang_event_t *ev;
 
+       rad_assert(stack->depth > 0);
+
+       frame = &stack->frame[stack->depth];
+
+       rad_assert(frame->instruction->type == UNLANG_TYPE_MODULE_CALL);
+
        ev = talloc_zero(request, unlang_event_t);
        if (!ev) return -1;
 
@@ -1404,8 +1412,16 @@ int unlang_event_timeout_add(REQUEST *request, fr_unlang_timeout_callback_t call
 int unlang_event_fd_readable_add(REQUEST *request, fr_unlang_fd_callback_t callback,
                                 void const *inst, void const *ctx, int fd)
 {
+       unlang_stack_frame_t    *frame;
+       unlang_stack_t          *stack = request->stack;
        unlang_event_t *ev;
 
+       rad_assert(stack->depth > 0);
+
+       frame = &stack->frame[stack->depth];
+
+       rad_assert(frame->instruction->type == UNLANG_TYPE_MODULE_CALL);
+
        ev = talloc_zero(request, unlang_event_t);
        if (!ev) return -1;