]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: quic: Missing case when discarding HANDSHAKE secrets
authorFrédéric Lécaille <flecaille@haproxy.com>
Thu, 19 Aug 2021 13:35:59 +0000 (15:35 +0200)
committerAmaury Denoyelle <adenoyelle@haproxy.com>
Thu, 23 Sep 2021 13:27:25 +0000 (15:27 +0200)
With very few packets received by the listener, it is possible
that its state may move from QUIC_HS_ST_SERVER_INITIAL to
QUIC_HS_ST_COMPLETE without transition to QUIC_HS_ST_SERVER_HANDSHAKE state.
This latter state is not mandatory.

src/xprt_quic.c

index 9cfade7c41cdf7e3f90d4b1f9601bc4f64bb7d24..11afae7f40655c2191aaca67e8462d11e2dd6475 100644 (file)
@@ -2661,7 +2661,8 @@ struct task *quic_conn_io_cb(struct task *t, void *context, unsigned int state)
                goto err;
 
        st = HA_ATOMIC_LOAD(&qc->state);
-       if (prev_st == QUIC_HS_ST_SERVER_HANDSHAKE && st >= QUIC_HS_ST_COMPLETE) {
+       if (st >= QUIC_HS_ST_COMPLETE &&
+           (prev_st == QUIC_HS_ST_SERVER_INITIAL || prev_st == QUIC_HS_ST_SERVER_HANDSHAKE)) {
                /* Discard the Handshake keys. */
                quic_tls_discard_keys(&qc->els[QUIC_TLS_ENC_LEVEL_HANDSHAKE]);
                quic_pktns_discard(qc->els[QUIC_TLS_ENC_LEVEL_HANDSHAKE].pktns, qc);