diff options
author | Tobias Brunner <tobias@strongswan.org> | 2012-07-06 10:54:06 +0200 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2012-07-16 14:53:35 +0200 |
commit | 504918348dec1355a5d11a513830bdffb7204b8c (patch) | |
tree | 049d4d8f3566750634bef1a98b9d3897c24eb357 /src | |
parent | 0c096e9bb50c7c92216508ba09446ec4ab719642 (diff) | |
download | strongswan-504918348dec1355a5d11a513830bdffb7204b8c.tar.bz2 strongswan-504918348dec1355a5d11a513830bdffb7204b8c.tar.xz |
Check rng return value when generating COOKIE2 during MOBIKE
Diffstat (limited to 'src')
-rw-r--r-- | src/libcharon/sa/ikev2/tasks/ike_mobike.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/src/libcharon/sa/ikev2/tasks/ike_mobike.c b/src/libcharon/sa/ikev2/tasks/ike_mobike.c index 8295bea0a..90c38666b 100644 --- a/src/libcharon/sa/ikev2/tasks/ike_mobike.c +++ b/src/libcharon/sa/ikev2/tasks/ike_mobike.c @@ -227,18 +227,20 @@ static void build_address_list(private_ike_mobike_t *this, message_t *message) /** * build a cookie and add it to the message */ -static void build_cookie(private_ike_mobike_t *this, message_t *message) +static bool build_cookie(private_ike_mobike_t *this, message_t *message) { rng_t *rng; chunk_free(&this->cookie2); rng = lib->crypto->create_rng(lib->crypto, RNG_STRONG); - if (rng) + if (!rng || !rng->allocate_bytes(rng, COOKIE2_SIZE, &this->cookie2)) { - rng->allocate_bytes(rng, COOKIE2_SIZE, &this->cookie2); - rng->destroy(rng); - message->add_notify(message, FALSE, COOKIE2, this->cookie2); + DESTROY_IF(rng); + return FALSE; } + message->add_notify(message, FALSE, COOKIE2, this->cookie2); + rng->destroy(rng); + return TRUE; } /** @@ -358,7 +360,10 @@ METHOD(task_t, build_i, status_t, { message->add_notify(message, FALSE, UPDATE_SA_ADDRESSES, chunk_empty); - build_cookie(this, message); + if (!build_cookie(this, message)) + { + return FAILED; + } update_children(this); } if (this->address && !this->check) |