From 04bfe83f71ea31d9d9d630120678821301272a87 Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Mon, 2 Oct 2023 16:17:33 +0200 Subject: [PATCH] trap-manager: Maintain allocated reqids when handling acquires --- src/libcharon/sa/trap_manager.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/libcharon/sa/trap_manager.c b/src/libcharon/sa/trap_manager.c index d8d8a421ac..1b85c66a5b 100644 --- a/src/libcharon/sa/trap_manager.c +++ b/src/libcharon/sa/trap_manager.c @@ -524,6 +524,7 @@ METHOD(trap_manager_t, acquire, void, child_cfg_t *child; ike_sa_t *ike_sa; host_t *host; + uint32_t allocated_reqid; bool wildcard, ignore = FALSE; this->lock->read_lock(this->lock); @@ -596,6 +597,8 @@ METHOD(trap_manager_t, acquire, void, peer = found->peer_cfg->get_ref(found->peer_cfg); child = found->child_sa->get_config(found->child_sa); child = child->get_ref(child); + /* only pass allocated reqids explicitly, take a reference */ + allocated_reqid = found->child_sa->get_reqid_ref(found->child_sa); /* don't hold the lock while checking out the IKE_SA */ this->lock->unlock(this->lock); @@ -635,7 +638,7 @@ METHOD(trap_manager_t, acquire, void, if (ike_sa) { child_init_args_t args = { - .reqid = reqid, + .reqid = allocated_reqid, .src = data->src, .dst = data->dst, .label = data->label, @@ -669,6 +672,10 @@ METHOD(trap_manager_t, acquire, void, destroy_acquire(acquire); child->destroy(child); } + if (allocated_reqid) + { + charon->kernel->release_reqid(charon->kernel, allocated_reqid); + } } /** -- 2.47.2