diff options
Diffstat (limited to 'src/libcharon/sa/ikev2/keymat_v2.c')
-rw-r--r-- | src/libcharon/sa/ikev2/keymat_v2.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/libcharon/sa/ikev2/keymat_v2.c b/src/libcharon/sa/ikev2/keymat_v2.c index 2275aad6f..be047d717 100644 --- a/src/libcharon/sa/ikev2/keymat_v2.c +++ b/src/libcharon/sa/ikev2/keymat_v2.c @@ -166,12 +166,24 @@ static bool derive_ike_traditional(private_keymat_v2_t *this, u_int16_t enc_alg, prf_plus->allocate_bytes(prf_plus, key_size, &key); DBG4(DBG_IKE, "Sk_ai secret %B", &key); - signer_i->set_key(signer_i, key); + if (!signer_i->set_key(signer_i, key)) + { + signer_i->destroy(signer_i); + signer_r->destroy(signer_r); + chunk_clear(&key); + return FALSE; + } chunk_clear(&key); prf_plus->allocate_bytes(prf_plus, key_size, &key); DBG4(DBG_IKE, "Sk_ar secret %B", &key); - signer_r->set_key(signer_r, key); + if (!signer_r->set_key(signer_r, key)) + { + signer_i->destroy(signer_i); + signer_r->destroy(signer_r); + chunk_clear(&key); + return FALSE; + } chunk_clear(&key); /* SK_ei/SK_er used for encryption */ |