Commit 348681ff authored by Bernd Edlinger's avatar Bernd Edlinger Committed by Richard Levitte
Browse files

Fix issue #2113:


- enable ssl3_init_finished_mac to return an error
- don't continue the SSL state machine if that happens
in ssl3_connect:
- if ssl3_setup_buffer fails also set state to SSL_ST_ERR for consistency

Reviewed-by: default avatarMatt Caswell <matt@openssl.org>
Reviewed-by: default avatarRichard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/2130)
parent a4aea443
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -320,8 +320,13 @@ int dtls1_connect(SSL *s)
            s->shutdown = 0;

            /* every DTLS ClientHello resets Finished MAC */
            ssl3_init_finished_mac(s);
            if (!ssl3_init_finished_mac(s)) {
                ret = -1;
                s->state = SSL_ST_ERR;
                goto end;
            }

            /* fall thru */
        case SSL3_ST_CW_CLNT_HELLO_B:
            dtls1_start_timer(s);
            ret = ssl3_client_hello(s);
+16 −3
Original line number Diff line number Diff line
@@ -282,7 +282,12 @@ int dtls1_accept(SSL *s)
                        goto end;
                    }

                ssl3_init_finished_mac(s);
                if (!ssl3_init_finished_mac(s)) {
                    ret = -1;
                    s->state = SSL_ST_ERR;
                    goto end;
                }

                s->state = SSL3_ST_SR_CLNT_HELLO_A;
                s->ctx->stats.sess_accept++;
            } else if (!s->s3->send_connection_binding &&
@@ -322,7 +327,11 @@ int dtls1_accept(SSL *s)
            s->state = SSL3_ST_SW_FLUSH;
            s->init_num = 0;

            ssl3_init_finished_mac(s);
            if (!ssl3_init_finished_mac(s)) {
                ret = -1;
                s->state = SSL_ST_ERR;
                goto end;
            }
            break;

        case SSL3_ST_SW_HELLO_REQ_C:
@@ -381,7 +390,11 @@ int dtls1_accept(SSL *s)

            /* HelloVerifyRequest resets Finished MAC */
            if (s->version != DTLS1_BAD_VER)
                ssl3_init_finished_mac(s);
                if (!ssl3_init_finished_mac(s)) {
                    ret = -1;
                    s->state = SSL_ST_ERR;
                    goto end;
                }
            break;

#ifndef OPENSSL_NO_SCTP
+4 −1
Original line number Diff line number Diff line
@@ -204,7 +204,10 @@ int ssl23_connect(SSL *s)
                goto end;
            }

            ssl3_init_finished_mac(s);
            if (!ssl3_init_finished_mac(s)) {
                ret = -1;
                goto end;
            }

            s->state = SSL23_ST_CW_CLNT_HELLO_A;
            s->ctx->stats.sess_connect++;
+4 −1
Original line number Diff line number Diff line
@@ -195,7 +195,10 @@ int ssl23_accept(SSL *s)
                s->init_buf = buf;
            }

            ssl3_init_finished_mac(s);
            if (!ssl3_init_finished_mac(s)) {
                ret = -1;
                goto end;
            }

            s->state = SSL23_ST_SR_CLNT_HELLO_A;
            s->ctx->stats.sess_accept++;
+6 −1
Original line number Diff line number Diff line
@@ -263,6 +263,7 @@ int ssl3_connect(SSL *s)

            if (!ssl3_setup_buffers(s)) {
                ret = -1;
                s->state = SSL_ST_ERR;
                goto end;
            }

@@ -275,7 +276,11 @@ int ssl3_connect(SSL *s)

            /* don't push the buffering BIO quite yet */

            ssl3_init_finished_mac(s);
            if (!ssl3_init_finished_mac(s)) {
                ret = -1;
                s->state = SSL_ST_ERR;
                goto end;
            }

            s->state = SSL3_ST_CW_CLNT_HELLO_A;
            s->ctx->stats.sess_connect++;
Loading