]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
"frame" is not talloc'd
authorAlan T. DeKok <aland@freeradius.org>
Wed, 2 Jul 2025 11:48:22 +0000 (07:48 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Wed, 2 Jul 2025 11:52:26 +0000 (07:52 -0400)
src/lib/unlang/interpret.c
src/lib/unlang/unlang_priv.h

index 409bfbb8ed0632c557dae94e0bc74c496ef5a72d..1003bc9a6b2f0bc44d4c0748ef2ebaf8974b6e4a 100644 (file)
@@ -1506,11 +1506,15 @@ int unlang_interpret_set_timeout(request_t *request, fr_time_delta_t timeout)
        unlang_stack_t                  *stack = request->stack;
        unlang_stack_frame_t            *frame = &stack->frame[stack->depth];
        unlang_retry_t                  *retry;
+       TALLOC_CTX                      *frame_ctx;
 
        fr_assert(!frame->retry);
        fr_assert(fr_time_delta_ispos(timeout));
 
-       frame->retry = retry = talloc_zero(frame, unlang_retry_t);
+       frame_ctx = frame->state;
+       if (!frame_ctx) frame_ctx = stack;
+
+       frame->retry = retry = talloc_zero(frame_ctx, unlang_retry_t);
        if (!frame->retry) return -1;
 
        retry->request = request;
index 92aa232af9392741e47390de1c5970f98746cb19..273fe2f570bb9834cad7f28a7484b03f8a79ccb0 100644 (file)
@@ -612,6 +612,7 @@ static inline void frame_cleanup(unlang_stack_frame_t *frame)
         *      Don't clear top_frame flag, bad things happen...
         */
        frame->flag &= UNLANG_FRAME_FLAG_TOP_FRAME;
+       TALLOC_FREE(frame->retry);
        if (frame->state) {
                talloc_free_children(frame->state); /* *(ev->parent) = NULL in event.c */
                TALLOC_FREE(frame->state);