ike-init: Destroy KE object after each derivation during initial exchanges

This fixes error handling in build_r_multi_ke() so we don't incorrectly
reuse the object from the previous exchange if we don't receive a KE
payload.
This commit is contained in:
Tobias Brunner
2026-05-19 17:27:33 +02:00
parent 158b4c4aa4
commit ac703e48c3
+2 -1
View File
@@ -1014,6 +1014,7 @@ static bool derive_keys_internal(private_ike_init_t *this, chunk_t nonce_i,
* our own SA as old SA to get SK_d */ * our own SA as old SA to get SK_d */
old_sa = this->ike_sa; old_sa = this->ike_sa;
array_insert_create(&kes, ARRAY_HEAD, this->ke); array_insert_create(&kes, ARRAY_HEAD, this->ke);
this->ke = NULL;
} }
id = this->ike_sa->get_id(this->ike_sa); id = this->ike_sa->get_id(this->ike_sa);
@@ -1029,7 +1030,7 @@ static bool derive_keys_internal(private_ike_init_t *this, chunk_t nonce_i,
} }
if (kes != this->kes) if (kes != this->kes)
{ {
array_destroy(kes); array_destroy_offset(kes, offsetof(key_exchange_t, destroy));
} }
return success; return success;
} }