aboutsummaryrefslogtreecommitdiffstats
path: root/src/libcharon/sa/ikev2/keymat_v2.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libcharon/sa/ikev2/keymat_v2.c')
-rw-r--r--src/libcharon/sa/ikev2/keymat_v2.c16
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 */