|
@@ -382,6 +382,7 @@ static void tls_close ( struct tls_connection *tls, int rc ) {
|
382
|
382
|
/* Remove pending operations, if applicable */
|
383
|
383
|
pending_put ( &tls->client_negotiation );
|
384
|
384
|
pending_put ( &tls->server_negotiation );
|
|
385
|
+ pending_put ( &tls->validation );
|
385
|
386
|
|
386
|
387
|
/* Remove process */
|
387
|
388
|
process_del ( &tls->process );
|
|
@@ -950,6 +951,7 @@ static void tls_restart ( struct tls_connection *tls ) {
|
950
|
951
|
assert ( ! tls->tx_pending );
|
951
|
952
|
assert ( ! is_pending ( &tls->client_negotiation ) );
|
952
|
953
|
assert ( ! is_pending ( &tls->server_negotiation ) );
|
|
954
|
+ assert ( ! is_pending ( &tls->validation ) );
|
953
|
955
|
|
954
|
956
|
/* (Re)initialise handshake context */
|
955
|
957
|
digest_init ( &md5_sha1_algorithm, tls->handshake_md5_sha1_ctx );
|
|
@@ -1875,6 +1877,7 @@ static int tls_new_server_hello_done ( struct tls_connection *tls,
|
1875
|
1877
|
"%s\n", tls, strerror ( rc ) );
|
1876
|
1878
|
return rc;
|
1877
|
1879
|
}
|
|
1880
|
+ pending_get ( &tls->validation );
|
1878
|
1881
|
|
1879
|
1882
|
return 0;
|
1880
|
1883
|
}
|
|
@@ -2582,10 +2585,10 @@ static int tls_progress ( struct tls_connection *tls,
|
2582
|
2585
|
struct job_progress *progress ) {
|
2583
|
2586
|
|
2584
|
2587
|
/* Return cipherstream or validator progress as applicable */
|
2585
|
|
- if ( tls_ready ( tls ) ) {
|
2586
|
|
- return job_progress ( &tls->cipherstream, progress );
|
2587
|
|
- } else {
|
|
2588
|
+ if ( is_pending ( &tls->validation ) ) {
|
2588
|
2589
|
return job_progress ( &tls->validator, progress );
|
|
2590
|
+ } else {
|
|
2591
|
+ return job_progress ( &tls->cipherstream, progress );
|
2589
|
2592
|
}
|
2590
|
2593
|
}
|
2591
|
2594
|
|
|
@@ -2820,6 +2823,9 @@ static void tls_validator_done ( struct tls_connection *tls, int rc ) {
|
2820
|
2823
|
struct pubkey_algorithm *pubkey = cipherspec->suite->pubkey;
|
2821
|
2824
|
struct x509_certificate *cert;
|
2822
|
2825
|
|
|
2826
|
+ /* Mark validation as complete */
|
|
2827
|
+ pending_put ( &tls->validation );
|
|
2828
|
+
|
2823
|
2829
|
/* Close validator interface */
|
2824
|
2830
|
intf_restart ( &tls->validator, rc );
|
2825
|
2831
|
|