mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-11-24 20:31:00 +01:00
BUG/MAJOR: quic: Possible crash when processing 1-RTT during 0-RTT session
This bug was revealed by some C1 interop tests (heavy hanshake packet corruption) when receiving 1-RTT packets with a key phase update. This lead the packet to be decrypted with the next key phase secrets. But this latter is initialized only after the handshake is complete. In fact, 1-RTT must never be processed before the handshake is complete. Relying on the "qc->mux_state == QC_MUX_NULL" condition to check the handshake is complete is wrong during 0-RTT sessions when the mux is initialized before the handshake is complete. Must be backported to 2.7 and 2.6.
This commit is contained in:
parent
37ed4a3842
commit
8417beb7da
@ -4035,6 +4035,11 @@ static int qc_qel_may_rm_hp(struct quic_conn *qc, struct quic_enc_level *qel)
|
|||||||
goto cant_rm_hp;
|
goto cant_rm_hp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (tel == QUIC_TLS_ENC_LEVEL_APP && qc->state < QUIC_HS_ST_COMPLETE) {
|
||||||
|
TRACE_DEVEL("handshake not complete", QUIC_EV_CONN_TRMHP, qc);
|
||||||
|
goto cant_rm_hp;
|
||||||
|
}
|
||||||
|
|
||||||
/* check if the connection layer is ready before using app level */
|
/* check if the connection layer is ready before using app level */
|
||||||
if ((tel == QUIC_TLS_ENC_LEVEL_APP || tel == QUIC_TLS_ENC_LEVEL_EARLY_DATA) &&
|
if ((tel == QUIC_TLS_ENC_LEVEL_APP || tel == QUIC_TLS_ENC_LEVEL_EARLY_DATA) &&
|
||||||
qc->mux_state == QC_MUX_NULL) {
|
qc->mux_state == QC_MUX_NULL) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user