No memmove: parse_new_session_ticket()

This commit is contained in:
Manuel Pégourié-Gonnard 2014-09-10 21:52:12 +02:00 committed by Paul Bakker
parent 0b3400dafa
commit 000d5aec13

View File

@ -2634,6 +2634,7 @@ static int ssl_parse_new_session_ticket( ssl_context *ssl )
uint32_t lifetime; uint32_t lifetime;
size_t ticket_len; size_t ticket_len;
unsigned char *ticket; unsigned char *ticket;
const unsigned char *msg;
SSL_DEBUG_MSG( 2, ( "=> parse new session ticket" ) ); SSL_DEBUG_MSG( 2, ( "=> parse new session ticket" ) );
@ -2643,8 +2644,6 @@ static int ssl_parse_new_session_ticket( ssl_context *ssl )
return( ret ); return( ret );
} }
ssl_hs_rm_dtls_hdr( ssl );
if( ssl->in_msgtype != SSL_MSG_HANDSHAKE ) if( ssl->in_msgtype != SSL_MSG_HANDSHAKE )
{ {
SSL_DEBUG_MSG( 1, ( "bad new session ticket message" ) ); SSL_DEBUG_MSG( 1, ( "bad new session ticket message" ) );
@ -2657,25 +2656,25 @@ static int ssl_parse_new_session_ticket( ssl_context *ssl )
* opaque ticket<0..2^16-1>; * opaque ticket<0..2^16-1>;
* } NewSessionTicket; * } NewSessionTicket;
* *
* 0 . 0 handshake message type * 0 . 3 ticket_lifetime_hint
* 1 . 3 handshake message length * 4 . 5 ticket_len (n)
* 4 . 7 ticket_lifetime_hint * 6 . 5+n ticket content
* 8 . 9 ticket_len (n)
* 10 . 9+n ticket content
*/ */
if( ssl->in_msg[0] != SSL_HS_NEW_SESSION_TICKET || if( ssl->in_msg[0] != SSL_HS_NEW_SESSION_TICKET ||
ssl->in_hslen < 10 ) ssl->in_hslen < 6 + ssl_hs_hdr_len( ssl ) )
{ {
SSL_DEBUG_MSG( 1, ( "bad new session ticket message" ) ); SSL_DEBUG_MSG( 1, ( "bad new session ticket message" ) );
return( POLARSSL_ERR_SSL_BAD_HS_NEW_SESSION_TICKET ); return( POLARSSL_ERR_SSL_BAD_HS_NEW_SESSION_TICKET );
} }
lifetime = ( ssl->in_msg[4] << 24 ) | ( ssl->in_msg[5] << 16 ) | msg = ssl->in_msg + ssl_hs_hdr_len( ssl );
( ssl->in_msg[6] << 8 ) | ( ssl->in_msg[7] );
ticket_len = ( ssl->in_msg[8] << 8 ) | ( ssl->in_msg[9] ); lifetime = ( msg[0] << 24 ) | ( msg[1] << 16 ) |
( msg[2] << 8 ) | ( msg[3] );
if( ticket_len + 10 != ssl->in_hslen ) ticket_len = ( msg[4] << 8 ) | ( msg[5] );
if( ticket_len + 6 + ssl_hs_hdr_len( ssl ) != ssl->in_hslen )
{ {
SSL_DEBUG_MSG( 1, ( "bad new session ticket message" ) ); SSL_DEBUG_MSG( 1, ( "bad new session ticket message" ) );
return( POLARSSL_ERR_SSL_BAD_HS_NEW_SESSION_TICKET ); return( POLARSSL_ERR_SSL_BAD_HS_NEW_SESSION_TICKET );
@ -2705,7 +2704,7 @@ static int ssl_parse_new_session_ticket( ssl_context *ssl )
return( POLARSSL_ERR_SSL_MALLOC_FAILED ); return( POLARSSL_ERR_SSL_MALLOC_FAILED );
} }
memcpy( ticket, ssl->in_msg + 10, ticket_len ); memcpy( ticket, msg + 6, ticket_len );
ssl->session_negotiate->ticket = ticket; ssl->session_negotiate->ticket = ticket;
ssl->session_negotiate->ticket_len = ticket_len; ssl->session_negotiate->ticket_len = ticket_len;