Add ticket length before buffering DTLS message
In ssl3_send_new_session_ticket the message to be sent is constructed. We skip adding the length of the session ticket initially, then call ssl_set_handshake_header, and finally go back and add in the length of the ticket. Unfortunately, in DTLS, ssl_set_handshake_header also has the side effect of buffering the message for subsequent retransmission if required. By adding the ticket length after the call to ssl_set_handshake_header the message that is buffered is incomplete, causing an invalid message to be sent on retransmission. Reviewed-by: Richard Levitte <levitte@openssl.org> (cherry picked from commit 4f9fab6bd0253416eeace5a45142c7c4a83bc511) Conflicts: ssl/s3_srvr.c
This commit is contained in:
parent
4285b85163
commit
a20718fa2c
@ -3391,10 +3391,10 @@ int ssl3_send_newsession_ticket(SSL *s)
|
|||||||
/* Now write out lengths: p points to end of data written */
|
/* Now write out lengths: p points to end of data written */
|
||||||
/* Total length */
|
/* Total length */
|
||||||
len = p - ssl_handshake_start(s);
|
len = p - ssl_handshake_start(s);
|
||||||
ssl_set_handshake_header(s, SSL3_MT_NEWSESSION_TICKET, len);
|
|
||||||
/* Skip ticket lifetime hint */
|
/* Skip ticket lifetime hint */
|
||||||
p = ssl_handshake_start(s) + 4;
|
p = ssl_handshake_start(s) + 4;
|
||||||
s2n(len - 6, p);
|
s2n(len - 6, p);
|
||||||
|
ssl_set_handshake_header(s, SSL3_MT_NEWSESSION_TICKET, len);
|
||||||
s->state = SSL3_ST_SW_SESSION_TICKET_B;
|
s->state = SSL3_ST_SW_SESSION_TICKET_B;
|
||||||
OPENSSL_free(senc);
|
OPENSSL_free(senc);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user