aboutsummaryrefslogtreecommitdiffstats
path: root/src/libfast/session.c
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2012-07-06 14:17:01 +0200
committerMartin Willi <martin@revosec.ch>2012-07-16 14:53:37 +0200
commit76a98ee2a1578a7f1f95b63846cefffad9b1df63 (patch)
treefe00bce63566fe8fbdcd7b6b9aaaa2066c27d494 /src/libfast/session.c
parent71c41410fc0b3c9022f1fe59f7b988363b84abea (diff)
downloadstrongswan-76a98ee2a1578a7f1f95b63846cefffad9b1df63.tar.bz2
strongswan-76a98ee2a1578a7f1f95b63846cefffad9b1df63.tar.xz
Check rng return value when generating libfast session COOKIEs
Diffstat (limited to 'src/libfast/session.c')
-rw-r--r--src/libfast/session.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/libfast/session.c b/src/libfast/session.c
index 1d9ed0107..99f2dcb38 100644
--- a/src/libfast/session.c
+++ b/src/libfast/session.c
@@ -78,20 +78,24 @@ METHOD(session_t, add_filter, void,
/**
* Create a session ID and a cookie
*/
-static void create_sid(private_session_t *this)
+static bool create_sid(private_session_t *this)
{
char buf[COOKIE_LEN];
rng_t *rng;
- memset(buf, 0, sizeof(buf));
- memset(this->sid, 0, sizeof(this->sid));
rng = lib->crypto->create_rng(lib->crypto, RNG_WEAK);
if (rng)
{
- rng->get_bytes(rng, sizeof(buf), buf);
+ return FALSE;
+ }
+ if (!rng->get_bytes(rng, sizeof(buf), buf))
+ {
rng->destroy(rng);
+ return FALSE;
}
+ rng->destroy(rng);
chunk_to_hex(chunk_create(buf, sizeof(buf)), this->sid, FALSE);
+ return TRUE;
}
/**
@@ -212,7 +216,11 @@ session_t *session_create(context_t *context)
.filters = linked_list_create(),
.context = context,
);
- create_sid(this);
+ if (!create_sid(this))
+ {
+ destroy(this);
+ return NULL;
+ }
return &this->public;
}