Commit 67f60be8 authored by Matt Caswell's avatar Matt Caswell
Browse files

Ensure |rwstate| is set correctly on BIO_flush



A BIO_flush call in the DTLS code was not correctly setting the |rwstate|
variable to SSL_WRITING. This means that SSL_get_error() will not return
SSL_ERROR_WANT_WRITE in the event of an IO retry.

Reviewed-by: default avatarRichard Levitte <levitte@openssl.org>
parent 2ad226e8
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -250,6 +250,8 @@ int dtls1_do_write(SSL *s, int type)
        blocksize = 0;

    frag_off = 0;
    s->rwstate = SSL_NOTHING;

    /* s->init_num shouldn't ever be < 0...but just in case */
    while (s->init_num > 0) {
        if (type == SSL3_RT_HANDSHAKE && s->init_off != 0) {
@@ -298,8 +300,10 @@ int dtls1_do_write(SSL *s, int type)
             * grr.. we could get an error if MTU picked was wrong
             */
            ret = BIO_flush(SSL_get_wbio(s));
            if (ret <= 0)
            if (ret <= 0) {
                s->rwstate = SSL_WRITING;
                return ret;
            }
            used_len = DTLS1_RT_HEADER_LENGTH + mac_size + blocksize;
            if (s->d1->mtu > used_len + DTLS1_HM_HEADER_LENGTH) {
                curr_mtu = s->d1->mtu - used_len;