Keep old method in case of an unsupported protocol
authorKurt Roeckx <kurt@roeckx.be>
Tue, 21 Oct 2014 18:45:15 +0000 (20:45 +0200)
committerKurt Roeckx <kurt@roeckx.be>
Tue, 21 Oct 2014 19:15:58 +0000 (21:15 +0200)
When we're configured with no-ssl3 and we receive an SSL v3 Client Hello, we set
the method to NULL.  We didn't used to do that, and it breaks things.  This is a
regression introduced in 62f45cc27d07187b59551e4fad3db4e52ea73f2c.  Keep the old
method since the code is not able to deal with a NULL method at this time.

CVE-2014-3569, PR#3571

Reviewed-by: Emilia Käsper <emilia@openssl.org>
(cherry picked from commit 392fa7a952e97d82eac6958c81ed1e256e6b8ca5)

ssl/s23_srvr.c

index 75c48ceb0ba3a421239a536c124a6bf902063697..f1974e0e3b3186ec5a1d351ed4e0ec4547bb9b87 100644 (file)
@@ -561,12 +561,14 @@ int ssl23_get_client_hello(SSL *s)
        if ((type == 2) || (type == 3))
                {
                /* we have SSLv3/TLSv1 (type 2: SSL2 style, type 3: SSL3/TLS style) */
-                s->method = ssl23_get_server_method(s->version);
-               if (s->method == NULL)
+               const SSL_METHOD *new_method;
+               new_method = ssl23_get_server_method(s->version);
+               if (new_method == NULL)
                        {
                        SSLerr(SSL_F_SSL23_GET_CLIENT_HELLO,SSL_R_UNSUPPORTED_PROTOCOL);
                        goto err;
                        }
+               s->method = new_method;
 
                if (!ssl_init_wbio_buffer(s,1)) goto err;