--- embedaddon/strongswan/src/libcharon/sa/ikev2/tasks/ike_rekey.c 2020/06/03 09:46:45 1.1 +++ embedaddon/strongswan/src/libcharon/sa/ikev2/tasks/ike_rekey.c 2021/03/17 00:20:09 1.1.1.2 @@ -126,16 +126,18 @@ static void establish_new(private_ike_rekey_t *this) this->ike_sa->get_other_host(this->ike_sa), this->ike_sa->get_other_id(this->ike_sa)); + /* register the new IKE_SA before calling inherit_post() as that may + * schedule jobs, as may listeners for ike_rekey() */ + charon->ike_sa_manager->checkout_new(charon->ike_sa_manager, + this->new_sa); this->new_sa->inherit_post(this->new_sa, this->ike_sa); charon->bus->ike_rekey(charon->bus, this->ike_sa, this->new_sa); job = check_queued_tasks(this->new_sa); - /* don't queue job before checkin(), as the IKE_SA is not yet - * registered at the manager */ - charon->ike_sa_manager->checkin(charon->ike_sa_manager, this->new_sa); if (job) { lib->processor->queue_job(lib->processor, job); } + charon->ike_sa_manager->checkin(charon->ike_sa_manager, this->new_sa); this->new_sa = NULL; charon->bus->set_sa(charon->bus, this->ike_sa); @@ -167,7 +169,7 @@ METHOD(task_t, build_i, status_t, if (this->new_sa == NULL) { version = this->ike_sa->get_version(this->ike_sa); - this->new_sa = charon->ike_sa_manager->checkout_new( + this->new_sa = charon->ike_sa_manager->create_new( charon->ike_sa_manager, version, TRUE); if (!this->new_sa) { /* shouldn't happen */ @@ -236,7 +238,7 @@ METHOD(task_t, process_r, status_t, return NEED_MORE; } - this->new_sa = charon->ike_sa_manager->checkout_new(charon->ike_sa_manager, + this->new_sa = charon->ike_sa_manager->create_new(charon->ike_sa_manager, this->ike_sa->get_version(this->ike_sa), FALSE); if (!this->new_sa) { /* shouldn't happen */