diff options
author | Matt Caswell <matt@openssl.org> | 2015-03-09 16:09:04 +0000 |
---|---|---|
committer | Matt Caswell <matt@openssl.org> | 2015-03-19 11:11:02 +0000 |
commit | e83ee04bb7de800cdb71d522fa562e99328003a3 (patch) | |
tree | e54a2ae2084559829886206120aa3e16bfdaa368 /ssl/d1_lib.c | |
parent | 1d2a18dc5a3b3363e17db5af8b6b0273856ac077 (diff) |
Fix Seg fault in DTLSv1_listen
The DTLSv1_listen function is intended to be stateless and processes
the initial ClientHello from many peers. It is common for user code to
loop over the call to DTLSv1_listen until a valid ClientHello is received
with an associated cookie. A defect in the implementation of DTLSv1_listen
means that state is preserved in the SSL object from one invokation to the
next that can lead to a segmentation fault. Erorrs processing the initial
ClientHello can trigger this scenario. An example of such an error could
be that a DTLS1.0 only client is attempting to connect to a DTLS1.2 only
server.
CVE-2015-0207
Reviewed-by: Richard Levitte <levitte@openssl.org>
Diffstat (limited to 'ssl/d1_lib.c')
-rw-r--r-- | ssl/d1_lib.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/ssl/d1_lib.c b/ssl/d1_lib.c index 626cecbcbf..e9a2fc5bf8 100644 --- a/ssl/d1_lib.c +++ b/ssl/d1_lib.c @@ -546,6 +546,9 @@ int dtls1_listen(SSL *s, struct sockaddr *client) { int ret; + /* Ensure there is no state left over from a previous invocation */ + SSL_clear(s); + SSL_set_options(s, SSL_OP_COOKIE_EXCHANGE); s->d1->listen = 1; |