From: Alan T. DeKok Date: Sat, 26 Nov 2016 21:35:14 +0000 (-0500) Subject: ensure that FD/timer add is only called from modules X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a422f950484ad666eb1422c753a56903fa34d4d2;p=thirdparty%2Ffreeradius-server.git ensure that FD/timer add is only called from modules --- diff --git a/src/main/unlang.c b/src/main/unlang.c index f4d87dd198b..494cf7a29f5 100644 --- a/src/main/unlang.c +++ b/src/main/unlang.c @@ -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;