diff --git a/src/libcharon/sa/ikev1/tasks/isakmp_natd.c b/src/libcharon/sa/ikev1/tasks/isakmp_natd.c index 44910175a..cd3bc21b0 100644 --- a/src/libcharon/sa/ikev1/tasks/isakmp_natd.c +++ b/src/libcharon/sa/ikev1/tasks/isakmp_natd.c @@ -123,12 +123,13 @@ static chunk_t generate_natd_hash_faked(private_isakmp_natd_t *this) return chunk_empty; } rng = lib->crypto->create_rng(lib->crypto, RNG_WEAK); - if (!rng) + if (!rng || + !rng->allocate_bytes(rng, hasher->get_hash_size(hasher), &chunk)) { DBG1(DBG_IKE, "unable to get random bytes for NAT-D fake"); + DESTROY_IF(rng); return chunk_empty; } - rng->allocate_bytes(rng, hasher->get_hash_size(hasher), &chunk); rng->destroy(rng); return chunk; } diff --git a/src/libcharon/sa/ikev2/tasks/ike_natd.c b/src/libcharon/sa/ikev2/tasks/ike_natd.c index 44a2be10b..55c028686 100644 --- a/src/libcharon/sa/ikev2/tasks/ike_natd.c +++ b/src/libcharon/sa/ikev2/tasks/ike_natd.c @@ -121,12 +121,12 @@ static chunk_t generate_natd_hash_faked(private_ike_natd_t *this) chunk_t chunk; rng = lib->crypto->create_rng(lib->crypto, RNG_WEAK); - if (!rng) + if (!rng || !rng->allocate_bytes(rng, HASH_SIZE_SHA1, &chunk)) { DBG1(DBG_IKE, "unable to get random bytes for NATD fake"); + DESTROY_IF(rng); return chunk_empty; } - rng->allocate_bytes(rng, HASH_SIZE_SHA1, &chunk); rng->destroy(rng); return chunk; }