From 349c3f5a0820948eacd12b1b9b93a1aadcdd3ada Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Tue, 20 Aug 2019 08:49:56 +0200 Subject: [PATCH] ngtcp2: move the h3 initing to immediately after the rx key To fix a segfault and to better deal with 0-RTT Assisted-by: Tatsuhiro Tsujikawa --- lib/vquic/ngtcp2.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/lib/vquic/ngtcp2.c b/lib/vquic/ngtcp2.c index 8ecc67045..bd24df35d 100644 --- a/lib/vquic/ngtcp2.c +++ b/lib/vquic/ngtcp2.c @@ -315,6 +315,7 @@ static void set_tls_alert(struct quicsocket *qs, uint8_t alert) { qs->tls_alert = alert; } +static int init_ngh3_conn(struct quicsocket *qs); static int ssl_on_key(struct quicsocket *qs, int name, const uint8_t *secret, size_t secretlen) @@ -395,6 +396,10 @@ static int ssl_on_key(struct quicsocket *qs, ngtcp2_conn_install_rx_keys(qs->qconn, key, keylen, iv, ivlen, hp, hplen); qs->rx_crypto_level = NGTCP2_CRYPTO_LEVEL_APP; + if(init_ngh3_conn(qs) != CURLE_OK) { + return NGTCP2_ERR_CALLBACK_FAILURE; + } + break; } return 0; @@ -746,8 +751,6 @@ cb_recv_crypto_data(ngtcp2_conn *tconn, ngtcp2_crypto_level crypto_level, return quic_read_tls(qs); } -static int init_ngh3_conn(struct quicsocket *qs); - static int cb_handshake_completed(ngtcp2_conn *tconn, void *user_data) { struct quicsocket *qs = (struct quicsocket *)user_data; @@ -755,10 +758,6 @@ static int cb_handshake_completed(ngtcp2_conn *tconn, void *user_data) qs->tx_crypto_level = NGTCP2_CRYPTO_LEVEL_APP; infof(qs->conn->data, "QUIC handshake is completed\n"); - if(init_ngh3_conn(qs) != CURLE_OK) { - return NGTCP2_ERR_CALLBACK_FAILURE; - } - return 0; }