mirror of https://github.com/ipxe/ipxe.git
[tls] Ensure received data list is initialised before calling tls_free()
A failure in tls_generate_random() will result in a call to ref_put() before the received data list has been initialised, which will cause free_tls() to attempt to traverse an uninitialised list. Fix by ensuring that all fields referenced by free_tls() are initialised before any of the potential failure paths. Signed-off-by: Michael Brown <mcb30@ipxe.org>pull/71/head
parent
eda9f4db61
commit
ac4fbd47ae
|
@ -2788,6 +2788,9 @@ int add_tls ( struct interface *xfer, const char *name,
|
|||
tls_clear_cipher ( tls, &tls->rx_cipherspec );
|
||||
tls_clear_cipher ( tls, &tls->rx_cipherspec_pending );
|
||||
tls->client_random.gmt_unix_time = time ( NULL );
|
||||
iob_populate ( &tls->rx_header_iobuf, &tls->rx_header, 0,
|
||||
sizeof ( tls->rx_header ) );
|
||||
INIT_LIST_HEAD ( &tls->rx_data );
|
||||
if ( ( rc = tls_generate_random ( tls, &tls->client_random.random,
|
||||
( sizeof ( tls->client_random.random ) ) ) ) != 0 ) {
|
||||
goto err_random;
|
||||
|
@ -2797,9 +2800,6 @@ int add_tls ( struct interface *xfer, const char *name,
|
|||
( sizeof ( tls->pre_master_secret.random ) ) ) ) != 0 ) {
|
||||
goto err_random;
|
||||
}
|
||||
iob_populate ( &tls->rx_header_iobuf, &tls->rx_header, 0,
|
||||
sizeof ( tls->rx_header ) );
|
||||
INIT_LIST_HEAD ( &tls->rx_data );
|
||||
|
||||
/* Start negotiation */
|
||||
tls_restart ( tls );
|
||||
|
|
Loading…
Reference in New Issue