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: Richard Levitte <levitte@openssl.org>
This commit is contained in:
parent
2ad226e88b
commit
67f60be8c9
1 changed files with 5 additions and 1 deletions
|
@ -250,6 +250,8 @@ int dtls1_do_write(SSL *s, int type)
|
||||||
blocksize = 0;
|
blocksize = 0;
|
||||||
|
|
||||||
frag_off = 0;
|
frag_off = 0;
|
||||||
|
s->rwstate = SSL_NOTHING;
|
||||||
|
|
||||||
/* s->init_num shouldn't ever be < 0...but just in case */
|
/* s->init_num shouldn't ever be < 0...but just in case */
|
||||||
while (s->init_num > 0) {
|
while (s->init_num > 0) {
|
||||||
if (type == SSL3_RT_HANDSHAKE && s->init_off != 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
|
* grr.. we could get an error if MTU picked was wrong
|
||||||
*/
|
*/
|
||||||
ret = BIO_flush(SSL_get_wbio(s));
|
ret = BIO_flush(SSL_get_wbio(s));
|
||||||
if (ret <= 0)
|
if (ret <= 0) {
|
||||||
|
s->rwstate = SSL_WRITING;
|
||||||
return ret;
|
return ret;
|
||||||
|
}
|
||||||
used_len = DTLS1_RT_HEADER_LENGTH + mac_size + blocksize;
|
used_len = DTLS1_RT_HEADER_LENGTH + mac_size + blocksize;
|
||||||
if (s->d1->mtu > used_len + DTLS1_HM_HEADER_LENGTH) {
|
if (s->d1->mtu > used_len + DTLS1_HM_HEADER_LENGTH) {
|
||||||
curr_mtu = s->d1->mtu - used_len;
|
curr_mtu = s->d1->mtu - used_len;
|
||||||
|
|
Loading…
Reference in a new issue